Namespaces
Variants

std:: unordered_multiset

From cppreference.net
Definido en el encabezado <unordered_set>
template <

class Key,
class Hash = std:: hash < Key > ,
class KeyEqual = std:: equal_to < Key > ,
class Allocator = std:: allocator < Key >

> class unordered_multiset ;
(1) (desde C++11)
namespace pmr {

template <
class Key,
class Hash = std:: hash < Key > ,
class Pred = std:: equal_to < Key >
> using unordered_multiset = std :: unordered_multiset < Key, Hash, Pred,
std:: pmr :: polymorphic_allocator < Key >> ;

}
(2) (desde C++17)

std::unordered_multiset es un contenedor asociativo que contiene un conjunto de objetos posiblemente no únicos de tipo Key. La búsqueda, inserción y eliminación tienen una complejidad de tiempo promedio constante.

Internamente, los elementos no están ordenados en ningún orden particular, sino organizados en buckets. En qué bucket se coloca un elemento depende completamente del hash de su valor. Esto permite un acceso rápido a elementos individuales, ya que una vez calculado el hash, este hace referencia al bucket exacto donde está colocado el elemento.

El orden de iteración de este contenedor no está garantizado que sea estable (por lo tanto, por ejemplo, std::equal no puede usarse para comparar dos std::unordered_multiset s), excepto que cada grupo de elementos cuyas claves se comparan equivalentes (se comparan iguales con key_eq() como comparador) forma un subrango contiguo en el orden de iteración, también accesible mediante equal_range() .

std::unordered_multiset cumple con los requisitos de Container , AllocatorAwareContainer , UnorderedAssociativeContainer .

Todas las funciones miembro de std::unordered_multiset son constexpr : es posible crear y utilizar objetos std::unordered_multiset en la evaluación de una expresión constante.

Sin embargo, los objetos std::unordered_multiset generalmente no pueden ser constexpr , porque cualquier almacenamiento asignado dinámicamente debe liberarse en la misma evaluación de la expresión constante.

(since C++26)

Contenidos

Parámetros de plantilla

Tipos de miembros

Tipo Definición
key_type Key
value_type Key
size_type Tipo entero sin signo (normalmente std::size_t )
difference_type Tipo entero con signo (normalmente std::ptrdiff_t )
hasher Hash
key_equal KeyEqual
allocator_type Allocator
reference value_type &
const_reference const value_type &
pointer std:: allocator_traits < Allocator > :: pointer
const_pointer std:: allocator_traits < Allocator > :: const_pointer
iterator Iterador constante LegacyForwardIterator y ConstexprIterator (desde C++26) a value_type
const_iterator LegacyForwardIterator y ConstexprIterator (desde C++26) a const value_type
local_iterator Un tipo de iterador cuya categoría, tipo de valor, diferencia, puntero y
tipos de referencia son los mismos que iterator . Este iterador
puede utilizarse para iterar a través de un solo bucket pero no entre buckets
const_local_iterator Un tipo de iterador cuya categoría, tipo de valor, diferencia, puntero y
tipos de referencia son los mismos que const_iterator . Este iterador
puede utilizarse para iterar a través de un solo bucket pero no entre buckets
node_type (desde C++17) una especialización de node handle que representa un nodo del contenedor

Funciones miembro

construye el unordered_multiset
(función miembro pública)
destruye el unordered_multiset
(función miembro pública)
asigna valores al contenedor
(función miembro pública)
devuelve el asignador asociado
(función miembro pública)
Iteradores
devuelve un iterador al principio
(función miembro pública)
devuelve un iterador al final
(función miembro pública)
Capacidad
comprueba si el contenedor está vacío
(función miembro pública)
devuelve el número de elementos
(función miembro pública)
devuelve el número máximo posible de elementos
(función miembro pública)
Modificadores
borra el contenido
(función miembro pública)
inserta elementos o nodos (desde C++17)
(función miembro pública)
inserta un rango de elementos
(función miembro pública)
construye el elemento in situ
(función miembro pública)
construye elementos in-situ usando una pista
(función miembro pública)
elimina elementos
(función miembro pública)
intercambia los contenidos
(función miembro pública)
(C++17)
extrae nodos del contenedor
(función miembro pública)
(C++17)
empalma nodos de otro contenedor
(función miembro pública)
Búsqueda
devuelve el número de elementos que coinciden con una clave específica
(función miembro pública)
encuentra elemento con clave específica
(función miembro pública)
(C++20)
comprueba si el contenedor contiene un elemento con clave específica
(función miembro pública)
devuelve el rango de elementos que coinciden con una clave específica
(función miembro pública)
Interfaz de Bucket
devuelve un iterador al inicio del bucket especificado
(función miembro pública)
devuelve un iterador al final del bucket especificado
(función miembro pública)
devuelve el número de buckets
(función miembro pública)
devuelve el número máximo de buckets
(función miembro pública)
devuelve el número de elementos en un bucket específico
(función miembro pública)
devuelve el cubo para una clave específica
(función miembro pública)
Política de hash
devuelve el número promedio de elementos por bucket
(función miembro pública)
gestiona el número máximo promedio de elementos por bucket
(función miembro pública)
reserva al menos el número especificado de buckets y regenera la tabla hash
(función miembro pública)
reserva espacio para al menos el número especificado de elementos y regenera la tabla hash
(función miembro pública)
Observadores
devuelve la función utilizada para hashear las claves
(función miembro pública)
devuelve la función utilizada para comparar claves para igualdad
(función miembro pública)

Funciones no miembro

(C++11) (C++11) (removed in C++20)
compara los valores en el unordered_multiset
(function template)
especializa el algoritmo std::swap
(function template)
borra todos los elementos que cumplen criterios específicos
(function template)

Guías de deducción

(desde C++17)

Notas

Los tipos miembro iterator y const_iterator pueden ser alias del mismo tipo. Esto significa que definir un par de sobrecargas de función usando los dos tipos como tipos de parámetro puede violar la One Definition Rule . Dado que iterator es convertible a const_iterator , una única función con un const_iterator como tipo de parámetro funcionará en su lugar.

Macro de prueba de características Valor Estándar Característica
__cpp_lib_containers_ranges 202202L (C++23) Construcción e inserción de rangos para contenedores
__cpp_lib_constexpr_unordered_set 202502L (C++26) constexpr std::unordered_muliset

Ejemplo

Informes de defectos

Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares publicados anteriormente de C++.

DR Aplicado a Comportamiento publicado Comportamiento correcto
LWG 2050 C++11 las definiciones de reference , const_reference , pointer
y const_pointer se basaban en allocator_type
basadas en value_type y
std::allocator_traits

Véase también

colección de claves únicas, hasheadas por claves
(class template)
colección de claves, ordenadas por claves
(class template)
adapta un contenedor para proporcionar una colección de claves, ordenadas por claves
(class template)