Compartir a través de


hash_multiset (Clase)

NotaNota

Esta API está obsoleta.La alternativa es unordered_multiset (Clase).

El hash_multiset de la clase contenedora es una extensión de la biblioteca de plantillas estándar y se utiliza para el almacenamiento y la recuperación rápida de datos de una colección en la que los valores de los elementos contenidos sirve como los valores de clave y no tiene que ser único.

template < 
   class Key,  
   class Traits=hash_compare<Key, less<Key> >,  
   class Allocator=allocator<Key>  
> 
class hash_multiset

Parámetros

  • Key
    El tipo de datos del elemento que se almacene en el hash_multiset.

  • Traits
    El tipo que incluye dos objetos de función, uno de la clase compara que es un predicado binario que puede comparar dos valores de elemento como criterio de ordenación para determinar el orden relativo y una función hash que sea valores de clave unarios de una asignación de predicado de elementos a enteros sin signo de size_tescrito. Este argumento es opcional, yhash_compare*<Clave,* menos*<Clave>>*es el valor predeterminado.

  • Allocator
    El tipo que representa el objeto almacenado de asignador que encapsula los detalles sobre la asignación y la desasignación de los hash_multiset de memoria. Este argumento es opcional, y el valor predeterminado esallocator*<Clave>.*

Comentarios

El hash_multiset es:

  • Un contenedor asociativo de tamaño variable que admite la recuperación eficaz de valores de elemento según un valor de clave asociado. Además, es un contenedor asociativa simple porque sus valores de elemento son los valores de clave.

  • Reversible, porque proporciona un iterador bidireccional para tener acceso a sus elementos.

  • Con algoritmo hash, ya que sus elementos se agrupan en depósitos en función del valor de una función hash aplicada a los valores de clave de los elementos.

  • Único en el sentido de que cada uno de sus elementos debe tener una clave única. Dado que el hash_multiset también es un contenedor asociativa simple, sus elementos también son únicos.

  • Una clase de plantilla porque la funcionalidad que proporciona es genérica y así que independiente del tipo específico de datos contenido como elementos o claves. Los tipos de datos que se usarán para los elementos y las claves se especifican como parámetros en la plantilla de clase junto con la función de comparación y el asignador.

La ventaja principal de hash sobre la ordenación es mayor eficacia: un hash correcto realiza las inserciones, eliminaciones, y las encuentra en tiempo de la media de la constante con respecto a una hora proporcional al logaritmo del número de elementos en el contenedor de las técnicas de ordenación. El valor de un elemento en un conjunto no se puede cambiar directamente. En su lugar, debe eliminar valores antiguos y insertar elementos con nuevos valores.

En general, la elección del tipo de contenedor se debe tomar según el tipo de búsqueda y de inserción que necesite la aplicación. Los contenedores asociativos con algoritmo hash están optimizados para las operaciones de búsqueda, inserción y eliminación. Las funciones miembro que admiten explícitamente estas operaciones son eficaces cuando se usan con una función hash bien diseñada, las realizan en un tiempo que es una constante promedio y no dependen del número de elementos del contenedor. Una función hash bien diseñada genera una distribución uniforme de valores hash y minimiza el número de colisiones; se produce una colisión cuando se asignan valores de clave distintos al mismo valor hash. En el peor de los casos, con la peor función hash posible, el número de operaciones es proporcional al número de elementos de la secuencia (tiempo lineal).

El hash_multiset debe ser el contenedor asociativa choice cuando son condiciones que asocian los valores a sus claves satisfacen por la aplicación. Los elementos de un hash_multiset pueden ser varios y actúan como sus propios criterios de ordenación, por lo que las claves no son únicas. Un modelo para este tipo de estructura es una lista ordenada, por ejemplo, de palabras en las que las palabras pueden aparecer más de una vez. Varias apariciones de las palabras no se hubieran permitidas, un hash_set habría la estructura apropiada del contenedor. Si las definiciones únicas fueran asociadas como valores a la lista de palabras claves únicas, un hash_map sería una estructura adecuada para contener estos datos. Si en su lugar las definiciones no se únicas, un hash_multimap sería el contenedor de la opción.

El hash_multiset pide la secuencia que controla llamando a un objeto almacenado de los rasgos hash de value_compareescrito. Se puede obtener acceso a este objeto almacenado llamando a la función miembro key_comp. Este tipo de objeto de la función debe comportarse igual que un objeto hash_compare*<Clave,* menos*<Clave>>.* Específicamente, porque toda la clave de configuración de Claveescrita, la llamada Rasgo(clave) produce una distribución de valores de size_tescrito.

En general, se debe poder comparar si los elementos son menores que otros para poder establecer este orden; de este modo, dados dos elementos cualesquiera, se puede determinar que son equivalentes (en el sentido de que ninguno es menor que el otro) o que uno es menor que el otro. Esto produce una ordenación entre los elementos no equivalentes. En un sentido más técnico, la función de comparación es un predicado binario que induce una ordenación débil estricta en el sentido matemático estándar. Una fbinaria de predicado (x,*y)*es un objeto de función que tiene dos objetos de argumento x e y y un valor devuelto de true o false. El orden impuesto a un hash_multiset es el orden débil estricto si el predicado binario es irreflexive, antisimétrico, y transitiva y si la equivalencia es transitiva, donde dos objetos x e y se definen para ser equivalentes cuando tanto f(x,*y)*y f(la y,*x)*es false. Si la condición más fuerte de igualdad entre las claves reemplaza la de equivalencia, la ordenación se convierte en total (en el sentido de que todos los elementos se ordenan entre sí) y las claves coincidentes serán indiscernibles unas de otras.

El orden real de los elementos de la secuencia controlada depende de la función hash, la función de ordenación y el tamaño actual de la tabla hash almacenada en el objeto contenedor. No se puede determinar el tamaño actual de la tabla hash, por lo que en general no se puede predecir el orden de los elementos de la secuencia controlada. La inserción de elementos no invalida ningún iterador y al quitar elementos solo se invalidan los iteradores que habían apuntado específicamente a los elementos quitados.

El iterador proporcionado por la clase de hash_multiset es un iterador bidireccional, pero el miembro de clase funciona inserción y hash_multiset tiene versiones que toman como parámetros de plantilla un iterador más débil de entrada, cuyos requisitos de funcionalidad son más mínimos que los garantizados por la clase de iteradores bidireccionales. Los distintos conceptos de iterador forman una familia relacionada por los refinamientos de su funcionalidad. Cada concepto de iterador tiene su propio hash_multiset de requisitos, y algoritmos que funcionan con ellos límite de la necesidad sus suposiciones a los requisitos proporcionados por ese tipo de iterador. Se puede suponer que se puede desreferenciar un iterador de entrada para hacer referencia a un objeto y que se puede incrementar hasta el iterador siguiente de la secuencia. Éste es un hash_multiset mínimo de funcionalidad, pero es suficiente para poder comunicarse significativo sobre un intervalo de iteradores [_First, _Last) en el contexto de las funciones miembro de clase.

En Visual C++ .NET 2003, los miembros de los archivos de encabezado <hash_map> y <hash_set> ya no están en el espacio de nombres std, sino que se han movido al espacio de nombres stdext. Vea El espacio de nombres stdext para obtener más información.

Constructores

hash_multiset

Construye un hash_multiset que está vacío o que es una copia de todo o de parte de otro hash_multiset.

Typedefs

allocator_type

Tipo que representa la clase allocator para el objeto hash_multiset.

const_iterator

Tipo que proporciona un iterador bidireccional que puede leer un elemento const en hash_multiset.

const_pointer

Tipo que proporciona un puntero a un elemento const en un hash_multiset.

const_reference

Tipo que proporciona una referencia a un elemento const almacenado en un hash_multiset para leer y realizar operaciones const.

const_reverse_iterator

Tipo que proporciona un iterador bidireccional que puede leer cualquier elemento const en hash_multiset.

difference_type

Un entero con signo escribe que proporciona la diferencia entre dos iteradores destinados elementos dentro del mismo hash_multiset.

iterator

Tipo que proporciona un iterador bidireccional que puede leer o modificar cualquier elemento de hash_multiset.

key_compare

Tipo que proporciona un objeto de función que puede comparar dos claves de ordenación para determinar el orden relativo de dos elementos en el hash_multiset.

key_type

Un tipo que describe un objeto almacenado como elemento de hash_set en su capacidad como criterio de ordenación.

puntero

Tipo que proporciona un puntero a un elemento de hash_multiset.

reference

Tipo que proporciona una referencia a un elemento almacenado en un hash_multiset.

reverse_iterator

Tipo que proporciona un iterador bidireccional que puede leer o modificar un elemento de hash_multiset invertido.

size_type

Tipo entero sin signo que puede representar el número de elementos de un hash_multiset.

value_compare

Un tipo que proporciona dos objetos de función, un predicado binario de la clase compara que puede comparar dos valores de elemento de hash_multiset para determinar el orden relativo y un predicado unario que aplique un algoritmo hash a los elementos.

value_type

Un tipo que describe un objeto almacenado como elemento de hash_multiset en su capacidad como valor.

Funciones miembro

begin

Devuelve un iterador que dirige el primer elemento de hash_multiset.

hash_multiset::cbegin

Devuelve un iterador constante que direcciona el primer elemento del hash_multiset.

hash_multiset::cend

Devuelve un iterador constante que direcciona la ubicación que sigue al último elemento de hash_multiset.

clear

Borra todos los elementos de un hash_multiset.

count

Devuelve el número de elementos de hash_multiset cuya clave coincide con una clave parámetro- especificada

hash_multiset::crbegin

Devuelve un iterador constante que direcciona el primer elemento de hash_multiset invertido.

hash_multiset::crend

Devuelve un iterador constante que direcciona la ubicación que sigue al último elemento de hash_multiset invertido.

hash_multiset::emplace

Inserta en un hash_multiset un elemento construido en contexto.

hash_multiset::emplace_hint

Inserta en un hash_multiset un elemento construido en contexto, con una sugerencia de colocación.

empty

Comprueba si un hash_multiset está vacío.

end

Devuelve un iterador que direcciona la ubicación que sigue al último elemento de hash_multiset.

equal_range

Devuelve un par de iteradores respectivamente al primer elemento de hash_multiset con una clave mayor que una clave especificada y al primer elemento de hash_multiset con una clave a la que sea igual o mayor que la clave.

erase

Quita un elemento o un intervalo de elementos de hash_multiset de posiciones especificadas o quita los elementos que coinciden con una clave especificada.

find

Devuelve un iterador que direcciona la ubicación de un elemento en un hash_multiset que tiene una clave equivalente a una clave especificada.

get_allocator

Devuelve una copia del objeto allocator utilizado para construir el hash_multiset.

insert

Inserta un elemento o un intervalo de elementos en un hash_multiset.

key_comp

Recupera una copia del objeto de comparación utilizado para ordenar claves de un hash_multiset.

lower_bound

Devuelve un iterador al primer elemento de hash_multiset con una clave a la que sea igual o mayor que una clave especificada.

max_size

Devuelve la longitud máxima del hash_multiset.

rbegin

Devuelve un iterador que direcciona el primer elemento de hash_multiset invertido.

rend

Devuelve un iterador que direcciona la ubicación que sigue al último elemento de hash_multiset invertido.

size

Devuelve el número de elementos de hash_multiset.

swap

Intercambia los elementos de dos hash_multiset.

upper_bound

Devuelve un iterador al primer elemento de hash_multiset que con una clave a la que sea igual o mayor que una clave especificada.

value_comp

Recupera una copia del objeto de los rasgos hash utilizado el hash y los valores de clave del elemento del orden en hash_multiset.

Operadores

hash_multiset::operator=

Reemplaza los elementos del hash_multiset con una copia de otro hash_multiset.

Requisitos

Encabezado: <hash_set>

Espacio de nombres: stdext

Vea también

Referencia

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

Biblioteca de plantillas estándar

Otros recursos

miembros de <hash_set>

miembros de hash_multiset