std:: unordered_multiset
|
Definido en el encabezado
<unordered_set>
|
||
|
template
<
class
Key,
|
(1) | (desde C++11) |
|
namespace
pmr
{
template
<
|
(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
|
(since C++26) |
Contenidos |
Parámetros de plantilla
|
Esta sección está incompleta
Razón: Añadir descripciones de los 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) |
|
|
(C++23)
|
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
|
Esta sección está incompleta
Razón: sin 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
|
(C++11)
|
colección de claves únicas, hasheadas por claves
(class template) |
|
colección de claves, ordenadas por claves
(class template) |
|
|
(C++23)
|
adapta un contenedor para proporcionar una colección de claves, ordenadas por claves
(class template) |