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

unordered_map::allocator_type

El tipo de un asignador para administrar el almacenamiento.

unordered_map::const_iterator

El tipo de un iterador constante para la secuencia controlada.

unordered_map::const_local_iterator

El tipo de un iterador de depósito constante para la secuencia controlada.

unordered_map::const_pointer

El tipo de un puntero constante a un elemento.

unordered_map::const_reference

El tipo de una referencia constante a un elemento.

unordered_map::difference_type

El tipo de una distancia con signo entre dos elementos.

unordered_map::hasher

El tipo de la función hash.

unordered_map::iterator

El tipo de un iterador para la secuencia controlada.

unordered_map::key_equal

El tipo de la función de comparación.

unordered_map::key_type

El tipo de una clave de ordenación.

unordered_map::local_iterator

El tipo de un iterador de depósito para la secuencia controlada.

unordered_map::mapped_type

El tipo de un valor asignado asociado a cada clave.

unordered_map::pointer

El tipo de un puntero a un elemento.

unordered_map::reference

El tipo de una referencia a un elemento.

unordered_map::size_type

El tipo de una distancia sin signo entre dos elementos.

unordered_map::value_type

El tipo de un elemento.

Función miembro

Descripción

unordered_map::at

Busca un elemento con la clave especificada.

unordered_map::begin

Designa el principio de la secuencia controlada.

unordered_map::bucket

Obtiene el número de depósito para un valor de clave.

unordered_map::bucket_count

Obtiene el número de depósitos.

unordered_map::bucket_size

Obtiene el tamaño de un depósito.

unordered_map::cbegin

Designa el principio de la secuencia controlada.

unordered_map::cend

Designa el final de la secuencia controlada.

unordered_map::clear

Quita todos los elementos.

unordered_map::count

Busca el número de elementos que coinciden con una clave especificada.

unordered_map::emplace

Agrega un elemento construido en contexto.

unordered_map::emplace_hint

Agrega un elemento construido en contexto, con sugerencia.

unordered_map::empty

Comprueba si no hay ningún elemento presente.

unordered_map::end

Designa el final de la secuencia controlada.

unordered_map::equal_range

Busca el intervalo que coincide con una clave especificada.

unordered_map::erase

Quita los elementos de las posiciones especificadas.

unordered_map::find

Busca un elemento que coincide con una clave especificada.

unordered_map::get_allocator

Obtiene el objeto de asignador almacenado.

unordered_map::hash_function

Obtiene el objeto de función hash almacenado.

unordered_map::insert

Agrega elementos.

unordered_map::key_eq

Obtiene el objeto de función de comparación almacenado.

unordered_map::load_factor

Cuenta los elementos promedio por depósito.

unordered_map::max_bucket_count

Obtiene el número máximo de depósitos.

unordered_map::max_load_factor

Obtiene o establece los elementos máximos por depósito.

unordered_map::max_size

Obtiene el tamaño máximo de la secuencia controlada.

unordered_map::rehash

Recompila la tabla hash.

unordered_map::size

Cuenta el número de elementos.

unordered_map::swap

Intercambia el contenido de dos contenedores.

unordered_map::unordered_map

Construye un objeto contenedor.

Operador

Descripción

unordered_map::operator[]

Busca o inserta un elemento con la clave especificada.

unordered_map::operator=

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

<unordered_map>

Seguridad para subprocesos en la biblioteca estándar de C++

Biblioteca de plantillas estándar

Conceptos

Contenedores