unordered_map (Clase)
La clase de plantilla describe un objeto que controla una secuencia de longitud variable de elementos de tipo std::pair<const Key, Ty>. La secuencia está ordenada débilmente por una función hash, que divide la secuencia en un conjunto ordenado subsecuencias denominadas depósitos. Dentro de cada depósito una función de comparación determina si algún par de elementos tiene una ordenación equivalente. Cada elemento almacena dos objetos, una clave de ordenación y un valor. La secuencia se representan de tal forma que permite la búsqueda, inserción y eliminación de un elemento arbitrario con una serie de operaciones que pueden ser independientes del número de elementos de la secuencia (tiempo constante), al menos cuando todos los depósitos tienen una longitud aproximadamente igual. En el peor de los casos, cuando todos los elementos están en un depósito, el número de operaciones es proporcional al número de elementos de la secuencia (tiempo lineal). Además, la inserción de un elemento no invalida ningún iterador y al quitar un elemento solo se invalidan los iteradores que apuntan al elemento quitado.
template<class Key,
class Ty,
class Hash = std::hash<Key>,
class Pred = std::equal_to<Key>,
class Alloc = std::allocator<std::pair<const Key, Ty> > >
class unordered_map;
Parámetros
Parámetro |
Descripción |
Key |
El tipo de clave. |
Ty |
El tipo asignado. |
Hash |
El tipo de objeto de la función hash. |
Pred |
El tipo de objeto de función de comparación de igualdad. |
Alloc |
Clase de asignador. |
Miembros
Definición de tipo |
Descripción |
El tipo de un asignador para administrar el almacenamiento. |
|
El tipo de un iterador constante para la secuencia controlada. |
|
El tipo de un iterador de depósito constante para la secuencia controlada. |
|
El tipo de un puntero constante a un elemento. |
|
El tipo de una referencia constante a un elemento. |
|
El tipo de una distancia con signo entre dos elementos. |
|
El tipo de la función hash. |
|
El tipo de un iterador para la secuencia controlada. |
|
El tipo de la función de comparación. |
|
El tipo de una clave de ordenación. |
|
El tipo de un iterador de depósito para la secuencia controlada. |
|
El tipo de un valor asignado asociado a cada clave. |
|
El tipo de un puntero a un elemento. |
|
El tipo de una referencia a un elemento. |
|
El tipo de una distancia sin signo entre dos elementos. |
|
El tipo de un elemento. |
Función miembro |
Descripción |
Busca un elemento con la clave especificada. |
|
Designa el principio de la secuencia controlada. |
|
Obtiene el número de depósito para un valor de clave. |
|
Obtiene el número de depósitos. |
|
Obtiene el tamaño de un depósito. |
|
Designa el principio de la secuencia controlada. |
|
Designa el final de la secuencia controlada. |
|
Quita todos los elementos. |
|
Busca el número de elementos que coinciden con una clave especificada. |
|
Agrega un elemento construido en contexto. |
|
Agrega un elemento construido en contexto, con sugerencia. |
|
Comprueba si no hay ningún elemento presente. |
|
Designa el final de la secuencia controlada. |
|
Busca el intervalo que coincide con una clave especificada. |
|
Quita los elementos de las posiciones especificadas. |
|
Busca un elemento que coincide con una clave especificada. |
|
Obtiene el objeto de asignador almacenado. |
|
Obtiene el objeto de función hash almacenado. |
|
Agrega elementos. |
|
Obtiene el objeto de función de comparación almacenado. |
|
Cuenta los elementos promedio por depósito. |
|
Obtiene el número máximo de depósitos. |
|
Obtiene o establece los elementos máximos por depósito. |
|
Obtiene el tamaño máximo de la secuencia controlada. |
|
Recompila la tabla hash. |
|
Cuenta el número de elementos. |
|
Intercambia el contenido de dos contenedores. |
|
Construye un objeto contenedor. |
Operador |
Descripción |
Busca o inserta un elemento con la clave especificada. |
|
Copia una tabla hash. |
Comentarios
El objeto ordena la secuencia que controla llamando a dos objetos almacenados, un objeto de función de comparación de tipo unordered_map::key_equal y un objeto de función hash de tipo unordered_map::hasher. Se tiene acceso al primer objeto almacenado llamando a la función miembro unordered_map::key_eq(); y se tiene acceso al segundo objeto almacenado llamando a la función miembro unordered_map::hash_function(). Concretamente, para todos los valores X e Y de tipo Key, la llamada a key_eq()(X, Y) solo devuelve true si los dos valores de argumento tienen una ordenación equivalente; la llamada a hash_function()(keyval) produce una distribución de valores de tipo size_t. A diferencia de la clase de plantilla unordered_multimap (Clase), un objeto de clase de plantilla unordered_map garantiza que key_eq()(X, Y) es siempre falso para cualquiera de los dos elementos de la secuencia controlada. (Las claves son únicas).
El objeto también almacena un factor de carga máxima, que especifica el número promedio deseado máximo de elementos por depósito. Si la inserción de un elemento hace que unordered_map::load_factor() supere el factor de carga máxima, el contenedor aumenta el número de depósitos y recompila la tabla hash según sea necesario.
El orden real de los elementos de la secuencia controlada depende de la función hash, la función de comparación, el orden de inserción, el factor de carga máxima y el número actual de depósitos. En general no se puede predecir el orden de los elementos de la secuencia controlada. Sin embargo, siempre se puede asegurar que cualquier subconjunto de elementos que tengan una ordenación equivalente son adyacentes en la secuencia controlada.
El objeto asigna y libera almacenamiento para la secuencia que controla a través de un objeto asignador almacenado de tipo unordered_map::allocator_type. Ese objeto de asignador debe tener la misma interfaz externa que un objeto de clase de plantilla allocator. Tenga en cuenta que el objeto de asignador almacenado no se copia cuando se asigna el objeto contenedor.
Requisitos
Encabezado: <unordered_map>
Espacio de nombres: std
Vea también
Referencia
Seguridad para subprocesos en la biblioteca estándar de C++
Biblioteca de plantillas estándar