std::unordered_map
es un contenedor asociativo que contiene pares clave-valor con claves únicas. La búsqueda, inserción y eliminación de elementos tienen una complejidad temporal promedio constante.
Internamente, los elementos no se ordenan de ninguna manera particular, sino que se organizan en cubos. En qué cubo se coloca un elemento depende completamente del hash de su clave. Las claves con el mismo código hash aparecen en el mismo cubo. Esto permite un acceso rápido a elementos individuales, ya que una vez calculado el hash, este hace referencia al cubo que contiene el elemento.
Dos claves se consideran
equivalentes
si el predicado de igualdad de claves del mapa devuelve verdadero cuando se le pasan esas claves. Si dos claves son equivalentes, la función hash debe devolver el mismo valor para ambas claves.
Todas las funciones miembro de
std::unordered_map
son
constexpr
: es posible crear y utilizar objetos
std::unordered_map
en la evaluación de una expresión constante.
Sin embargo, los objetos
std::unordered_map
generalmente no pueden ser
constexpr
, porque cualquier almacenamiento asignado dinámicamente debe liberarse en la misma evaluación de la expresión constante.
Las funciones de intercambio no invalidan ninguno de los iteradores dentro del contenedor, pero sí invalidan el iterador que marca el final de la región de intercambio.
Las referencias y punteros a la clave o los datos almacenados en el contenedor solo se invalidan al eliminar ese elemento, incluso cuando el iterador correspondiente queda invalidado.
Parámetros de plantilla
Esta sección está incompleta
Motivo: Agregar descripciones de los parámetros de plantilla.
Tipos miembro
Tipo
Definición
key_type
Key
mapped_type
T
value_type
std::pair<constKey,T>
size_type
tipo entero sin signo (normalmente std::size_t)
difference_type
tipo entero con signo (normalmente std::ptrdiff_t)
un tipo de iterador cuya categoría, valor, diferencia, puntero y tipos de referencia son los mismos que iterator. Este iterador se puede usar para iterar a través de un único cubo pero no entre cubos
const_local_iterator
un tipo de iterador cuya categoría, valor, diferencia, puntero y tipos de referencia son los mismos que const_iterator. Este iterador se puede usar para iterar a través de un único cubo pero no entre cubos
node_type(desde C++17)
una especialización de manejador de nodo que representa un nodo del contenedor
insert_return_type(desde C++17)
tipo que describe el resultado de insertar un node_type, una especialización de
#include <iostream>#include <string>#include <unordered_map>int main(){// Crear un unordered_map de tres cadenas (que mapean a cadenas)
std::unordered_map<std::string, std::string> u ={{"RED", "#FF0000"},
{"GREEN", "#00FF00"},
{"BLUE", "#0000FF"}};// Función lambda auxiliar para imprimir pares clave-valorauto print_key_value =[](constauto& key, constauto& value){std::cout<<"Clave:["<< key <<"] Valor:["<< value <<"]\n";};std::cout<<"Iterar e imprimir pares clave-valor de unordered_map, siendo\n""explícito con sus tipos:\n";for(conststd::pair<conststd::string, std::string>& n : u)
print_key_value(n.first, n.second);std::cout<<"\nIterar e imprimir pares clave-valor usando enlace estructurado de C++17:\n";for(constauto&[key, value]: u)
print_key_value(key, value);// Agregar dos nuevas entradas al unordered_map
u["BLACK"]="#000000";
u["WHITE"]="#FFFFFF";std::cout<<"\nMostrar valores por clave:\n""El HEX del color ROJO es:["<< u["RED"]<<"]\n""El HEX del color NEGRO es:["<< u["BLACK"]<<"]\n\n";std::cout<<"Usar operator[] con clave inexistente para insertar un nuevo par clave-valor:\n";
print_key_value("new_key", u["new_key"]);std::cout<<"\nIterar e imprimir pares clave-valor, usando `auto`;\n""new_key es ahora una de las claves en el mapa:\n";for(constauto& n : u)
print_key_value(n.first, n.second);}
Salida posible:
Iterar e imprimir pares clave-valor de unordered_map, siendo
explícito con sus tipos:
Clave:[BLUE] Valor:[#0000FF]
Clave:[GREEN] Valor:[#00FF00]
Clave:[RED] Valor:[#FF0000]
Iterar e imprimir pares clave-valor usando enlace estructurado de C++17:
Clave:[BLUE] Valor:[#0000FF]
Clave:[GREEN] Valor:[#00FF00]
Clave:[RED] Valor:[#FF0000]
Mostrar valores por clave:
El HEX del color ROJO es:[#FF0000]
El HEX del color NEGRO es:[#000000]
Usar operator[] con clave inexistente para insertar un nuevo par clave-valor:
Clave:[new_key] Valor:[]
Iterar e imprimir pares clave-valor, usando `auto`;
new_key es ahora una de las claves en el mapa:
Clave:[new_key] Valor:[]
Clave:[WHITE] Valor:[#FFFFFF]
Clave:[BLACK] Valor:[#000000]
Clave:[BLUE] Valor:[#0000FF]
Clave:[GREEN] Valor:[#00FF00]
Clave:[RED] Valor:[#FF0000]
Informes de defectos
Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.