Biblioteca estándar de C++<unordered_map>

En C++,<unordered_map>es parte de la Biblioteca de Plantillas Estándar (STL) y proporciona un contenedor de pares clave-valor basado en una tabla hash.

ystd::mapA diferencia,unordered_mapno garantiza el orden de los elementos, pero normalmente proporciona una velocidad de búsqueda más rápida.

unordered_mapes un contenedor asociativo que almacena pares clave-valor, donde cada clave (key) es única.unordered_mapUtiliza una tabla hash para almacenar elementos, lo que le proporciona una complejidad temporal promedio constante en las operaciones de búsqueda, inserción y eliminación.

Sintaxis

A continuación se muestraunordered_mapla sintaxis básica de:

#include <unordered_map>

std::unordered_map<key_type, value_type> map_name;
  • key_typees el tipo de la clave.
  • value_typees el tipo del valor.

Constructor

unordered_mapSe puede construir de varias maneras:

// 默认构造
std::unordered_map<int, std::string> myMap;

// 构造并初始化
std::unordered_map<int, std::string> myMap = {{1, "one"}, {2, "two"}};

// 构造并指定初始容量
std::unordered_map<int, std::string> myMap(10);

// 构造并复制另一个 unordered_map
std::unordered_map<int, std::string> anotherMap = myMap;

Operaciones básicas

Insertar elementos:

myMap.insert({3, "three"});

Acceder a elementos:

std::string value = myMap[1]; // 获取键为1的值

Eliminar elementos:

myMap.erase(1); // 删除键为1的元素

Buscar elementos:

auto it = myMap.find(2); // 查找键为2的元素
if (it != myMap.end()) {
    std::cout << "Found: " << it->second << std::endl;
}

Ejemplo

A continuación se muestraunordered_mapun ejemplo simple de uso, incluyendo el resultado de salida.

Ejemplo

#include <iostream>
#include <unordered_map>

int main() {
    // Crear un unordered_map, con clave int y valor string
    std::unordered_map<int, std::string> myMap;

    // Insertar algunos pares clave-valor
    myMap[1] = "one";
    myMap[2] = "two";
    myMap[3] = "three";

    // Imprimir todos los elementos
    for (const auto& pair : myMap) {
        std::cout << "Key: " << pair.first << ", Value: " << pair.second << std::endl;
    }

    // Acceder al valor de una clave específica
    std::cout << "Value for key 2: " << myMap[2] << std::endl;

    // Eliminar el elemento con clave 1
    myMap.erase(1);

    // Volver a imprimir todos los elementos
    std::cout << "After erasing key 1:" << std::endl;
    for (const auto& pair : myMap) {
        std::cout << "Key: " << pair.first << ", Value: " << pair.second << std::endl;
    }

    return 0;
}

Resultado:

Key: 1, Value: one
Key: 2, Value: two
Key: 3, Value: three
Value for key 2: two
After erasing key 1:
Key: 2, Value: two
Key: 3, Value: three

Consideraciones

  • unordered_mapNo se garantiza el orden de los elementos, por lo que el orden de iteración de los elementos puede variar entre diferentes ejecuciones.
  • El rendimiento de la tabla hash depende de una buena función hash para evitar demasiadas colisiones de hash.
  • ystd::mapEn comparación,unordered_mappuede ocupar más memoria cuando el número de elementos es pequeño.
Otras extensiones