C++ named requirements: UnorderedAssociativeContainer (since C++11)
Los contenedores asociativos no ordenados son Container s que proporcionan búsqueda rápida de objetos basada en claves. La complejidad en el peor caso es lineal pero en promedio son mucho más rápidos para la mayoría de las operaciones.
Los contenedores asociativos no ordenados están parametrizados por
Key
;
Hash
, un objeto función
Hash
que actúa como función hash en
Key
; y
Pred
, un
BinaryPredicate
que evalúa la equivalencia entre
Key
s.
std::unordered_map
y
std::unordered_multimap
también tienen un tipo mapeado
T
asociado con la
Key
.
Si dos
Key
s son iguales según
Pred
,
Hash
debe devolver el mismo valor para ambas claves.
|
Si tanto
|
(desde C++20) |
std::unordered_map y std::unordered_set pueden contener como máximo un elemento con una clave dada, std::unordered_multiset y std::unordered_multimap en cambio pueden tener múltiples elementos con la misma clave (los cuales siempre deben ser adyacentes en las iteraciones).
Para
std::unordered_set
y
std::unordered_multiset
el tipo de valor es el mismo que el tipo de clave y tanto
iterator
como
const_iterator
son iteradores constantes.
Para
std::unordered_map
y
std::unordered_multimap
el tipo de valor es
std::
pair
<
const
Key, T
>
.
Los elementos en un contenedor asociativo no ordenado se organizan en cubos (buckets), las claves con el mismo hash terminarán en el mismo cubo. El número de cubos se incrementa cuando el tamaño del contenedor aumenta para mantener el número promedio de elementos en cada cubo por debajo de un valor determinado.
El rehash invalida los iteradores y puede causar que los elementos se reorganicen en diferentes buckets, pero no invalida las referencias a los elementos.
Los contenedores asociativos no ordenados cumplen con los requisitos de
AllocatorAwareContainer
.
Para
std::unordered_map
y
std::unordered_multimap
los requisitos de
value_type
en
AllocatorAwareContainer
se aplican a
key_type
y
mapped_type
(no a
value_type
).
Contenidos |
Requisitos
Leyenda |
|
X
|
Una clase de contenedor asociativo no ordenado |
| a |
Un valor de tipo
X
|
| a2 |
Un valor de un tipo con
nodos compatibles con el tipo
X
|
| b |
Un valor de tipo
X
o
const X
|
| a_uniq |
Un valor de tipo
X
cuando
X
admite claves únicas
|
| a_eq |
Un valor de tipo
X
cuando
X
admite claves equivalentes
|
| a_tran |
Un valor de tipo
X
o
const
X
cuando los identificadores calificados
X::key_equal::is_transparent
y
X::hasher::is_transparent
son ambos válidos y denotan
tipos
|
| i , j |
Iteradores de entrada que hacen referencia a
value_type
|
[
i
,
j
)
|
Un rango válido |
| rg (desde C++23) |
Un valor de un tipo
R
que modela
container-compatible-range
<value_type>
|
| p , q2 | Iteradores constantes válidos a a |
| q , q1 | Iteradores constantes válidos desreferenciables a a |
| r | Un iterador válido desreferenciable a a |
[
q1
,
q2
)
|
Un rango válido en a |
| il | Un valor de tipo std:: initializer_list < value_type > |
| t |
Un valor de tipo
X::value_type
|
| k |
Un valor de tipo
key_type
|
| hf |
Un valor de tipo
hasher
o
const
hasher
|
| eq |
Un valor de tipo
key_equal
o
const
key_equal
|
| ke |
Un valor tal que
donde r1 y r2 son claves de elementos en a_tran |
| kx (desde C++23) |
Un valor tal que
donde r1 y r2 son claves de elementos en a_tran |
| n |
Un valor de tipo
size_type
|
| z | Un valor de tipo float |
| nh (desde C++17) | Un valor r de tipo X :: node_type |
Tipos de miembros
| Nombre | Tipo | Requisitos | Notas |
|---|---|---|---|
X::key_type
|
Key
|
||
X::mapped_type
|
T
|
std::unordered_map y std::unordered_multimap únicamente | |
X::value_type
|
Key
|
std::unordered_set
y
std::unordered_multiset
únicamente.
Erasable
en
X
|
|
| std:: pair < const Key, T > |
std::unordered_map
y
std::unordered_multimap
únicamente.
Erasable
en
X
|
||
X::hasher
|
Hash
|
Hash | |
X::key_equal
|
Pred
|
CopyConstructible
;
BinaryPredicate
que toma dos argumentos de tipo
Key
y expresa una relación de equivalencia
|
|
X::local_iterator
|
LegacyIterator |
La categoría y tipos son los mismos que
X::iterator
|
Puede usarse para iterar a través de un solo bucket, pero no entre buckets |
X::const_local_iterator
|
LegacyIterator |
La categoría y tipos son los mismos que
X::const_iterator
|
|
X::node_type
(desde C++17)
|
Una especialización de la plantilla de clase node-handle |
Los tipos anidados públicos son los mismos que los tipos correspondientes en
X
|
Funciones miembro y operadores
| Expresión | Resultado | Precondiciones | Efectos | Retorna | Complejidad |
|---|---|---|---|---|---|
| X ( n, hf, eq ) | Construye un contenedor vacío con al menos n cubetas, usando hf como función hash y eq como predicado de igualdad de claves | O ( n ) | |||
| X ( n, hf ) |
key_equal
es
DefaultConstructible
|
Construye un contenedor vacío con al menos n cubetas, usando hf como función hash y key_equal ( ) como predicado de igualdad de claves | O ( n ) | ||
| X ( n ) |
hasher
y
key_equal
son
DefaultConstructible
|
Construye un contenedor vacío con al menos n cubetas, usando hasher ( ) como función hash y key_equal ( ) como predicado de igualdad de claves | O ( n ) | ||
|
X a
=
X
(
)
;
X a ; |
hasher
y
key_equal
son
DefaultConstructible
|
Construye un contenedor vacío con un número no especificado de buckets, usando hasher ( ) como función hash y key_equal ( ) como predicado de igualdad de claves | Constante | ||
| X ( i, j, n, hf, eq ) |
value_type
es
EmplaceConstructible
en
X
desde
*
i
|
Construye un contenedor vacío con al menos
n
cubos, usando
hf
como función hash y
eq
como predicado de igualdad de claves, e inserta elementos desde
[
i
,
j
)
en él
|
Caso promedio O(N) ( N es std:: distance ( i, j ) ), caso peor O(N 2 ) | ||
| X ( i, j, n, hf ) |
key_equal
es
DefaultConstructible
.
value_type
es
EmplaceConstructible
en
X
desde
*
i
|
Construye un contenedor vacío con al menos
n
cubetas, usando
hf
como función hash y
key_equal
(
)
como predicado de igualdad de claves, e inserta elementos desde
[
i
,
j
)
en él
|
Caso promedio O(N) ( N es std:: distance ( i, j ) ), caso peor O(N 2 ) | ||
| X ( i, j, n ) |
hasher
y
key_equal
son
DefaultConstructible
.
value_type
es
EmplaceConstructible
en
X
desde
*
i
|
Construye un contenedor vacío con al menos
n
cubetas, usando
hasher
(
)
como función hash y
key_equal
(
)
como predicado de igualdad de claves, e inserta elementos desde
[
i
,
j
)
en él
|
Caso promedio O(N) ( N es std:: distance ( i, j ) ), caso peor O(N 2 ) | ||
| X ( i, j ) |
hasher
y
key_equal
son
DefaultConstructible
.
value_type
es
EmplaceConstructible
en
X
desde
*
i
|
Construye un contenedor vacío con un número no especificado de buckets, usando
hasher
(
)
como función hash y
key_equal
(
)
como predicado de igualdad de claves, e inserta elementos desde
[
i
,
j
)
en él
|
Caso promedio O(N) ( N es std:: distance ( i, j ) ), caso peor O(N 2 ) | ||
|
X
(
std::
from_range
,
rg, n, hf, eq ) (desde C++23) |
value_type
es
EmplaceConstructible
en
X
desde
*
ranges::
begin
(
rg
)
|
Construye un contenedor vacío con al menos n buckets, usando hf como función hash y eq como predicado de igualdad de claves, e inserta elementos desde rg en él | Caso promedio O(N) ( N es ranges:: distance ( rg ) ), caso peor O(N 2 ) | ||
|
X
(
std::
from_range
,
rg, n, hf ) (desde C++23) |
key_equal
es
DefaultConstructible
.
value_type
es
EmplaceConstructible
en
X
desde
*
ranges::
begin
(
rg
)
|
Construye un contenedor vacío con al menos n cubetas, usando hf como función hash y key_equal ( ) como predicado de igualdad de claves, e inserta elementos desde rg en él | Caso promedio O(N) ( N es ranges:: distance ( rg ) ), caso peor O(N 2 ) | ||
|
X
(
std::
from_range
,
rg, n ) (desde C++23) |
hasher
y
key_equal
son
DefaultConstructible
.
value_type
es
EmplaceConstructible
en
X
desde
*
ranges::
begin
(
rg
)
|
Construye un contenedor vacío con al menos n cubetas, usando hasher ( ) como función hash y key_equal ( ) como predicado de igualdad de claves, e inserta elementos desde rg en él | Caso promedio O(N) ( N es ranges:: distance ( rg ) ), caso peor O(N 2 ) | ||
|
X
(
std::
from_range
,
rg ) (desde C++23) |
hasher
y
key_equal
son
DefaultConstructible
.
value_type
es
EmplaceConstructible
en
X
desde
*
ranges::
begin
(
rg
)
|
Construye un contenedor vacío con un número no especificado de buckets, usando hasher ( ) como función hash y key_equal ( ) como predicado de igualdad de claves, e inserta elementos desde rg en él | Caso promedio O(N) ( N es ranges:: distance ( rg ) ), caso peor O(N 2 ) | ||
| X ( il ) | X ( il. begin ( ) , il. end ( ) ) | ||||
| X ( il, n ) | X ( il. begin ( ) , il. end ( ) , n ) | ||||
| X ( il, n, hf ) | X ( il. begin ( ) , il. end ( ) , n, hf ) | ||||
| X ( il, n, hf, eq ) | X ( il. begin ( ) , il. end ( ) , n, hf, eq ) | ||||
| X ( b ) | Container ; Copia la función hash, el predicado y el factor de carga máximo | Caso promedio lineal en b. size ( ) , caso peor O(N 2 ) | |||
| a = b |
X&
|
Container ; copia la función hash, el predicado y el factor de carga máximo | Caso promedio lineal en b. size ( ) , caso peor O(N 2 ) | ||
| a = il |
X&
|
value_type
es
CopyInsertable
en
X
y
CopyAssignable
|
Asigna el rango
[
il.
begin
(
)
,
il.
end
(
)
)
a
a
. Todos los elementos existentes de
a
son asignados o destruidos
|
Caso promedio lineal en il. size ( ) , caso peor O(N 2 ) | |
| b. hash_function ( ) |
hasher
|
b función hash de b | Constante | ||
| b. key_eq ( ) |
key_equal
|
b 's predicado de igualdad de claves | Constante | ||
| a_uniq. emplace ( args ) |
std::
pair
<
iterator, bool > |
value_type
es
EmplaceConstructible
en
X
desde
args
|
Inserta un objeto
value_type
t
construido con
std::
forward
<
Args
>
(
args
)
...
si y solo si no existe ningún elemento en el contenedor con clave equivalente a la clave de
t
|
El componente bool del par devuelto es true si y solo si la inserción se realiza, y el componente iterador del par apunta al elemento con clave equivalente a la clave de t | Caso promedio O(1) , caso peor O ( a_uniq. size ( ) ) |
| a_eq. emplace ( args ) |
iterator
|
value_type
es
EmplaceConstructible
en
X
desde
args
|
Inserta un objeto
value_type
t
construido con
std::
forward
<
Args
>
(
args
)
...
|
Un iterador que apunta al elemento recién insertado | Caso promedio O(1) , caso peor O ( a_eq. size ( ) ) |
| a. emplace_hint ( p, args ) |
iterator
|
value_type
es
EmplaceConstructible
en
X
desde
args
|
a.
emplace
(
std:: forward < Args > ( args ) ... ) |
Un iterador que apunta al elemento con la clave equivalente al elemento recién insertado. El
const_iterator
p
es una sugerencia que indica dónde debería comenzar la búsqueda. Se permite a las implementaciones ignorar la sugerencia
|
Caso promedio O(1) , caso peor O ( a. size ( ) ) |
| a_uniq. insert ( t ) |
std::
pair
<
iterator, bool > |
Si
t
es un rvalue no constante,
value_type
debe ser
MoveInsertable
en
X
; de lo contrario,
value_type
debe ser
CopyInsertable
en
X
|
Inserta t si y solo si no existe ningún elemento en el contenedor con clave equivalente a la clave de t |
El componente
bool
del par devuelto indica si la inserción se realiza, y el componente
iterator
apunta al elemento con clave equivalente a la clave de
t
|
Caso promedio O(1) , caso peor O ( a_uniq. size ( ) ) |
| a_eq. insert ( t ) |
iterator
|
Si
t
es un rvalue no constante,
value_type
debe ser
MoveInsertable
en
X
; de lo contrario,
value_type
debe ser
CopyInsertable
en
X
|
Inserta t | Un iterador que apunta al elemento recién insertado | Caso promedio O(1) , caso peor O ( a_eq. size ( ) ) |
| a. insert ( p, t ) |
iterator
|
Si
t
es un rvalue no constante,
value_type
debe ser
MoveInsertable
en
X
; de lo contrario,
value_type
debe ser
CopyInsertable
en
X
|
a. insert ( t ) . El iterador p es una sugerencia que indica dónde debe comenzar la búsqueda. Las implementaciones pueden ignorar la sugerencia | Un iterador que apunta al elemento con clave equivalente a la de t | Caso promedio O(1) , caso peor O ( a. size ( ) ) |
| a. insert ( i, j ) | void |
value_type
es
EmplaceConstructible
en
X
desde
*
i
. Ni
i
ni
j
son iteradores de
a
|
a.
insert
(
t
)
para cada elemento en
[
i
,
j
)
|
Caso promedio O(N) , donde N es std:: distance ( i, j ) , caso peor O ( N· ( a. size ( ) + 1 ) ) | |
|
a.
insert_range
(
rg
)
(desde C++23) |
void |
value_type
es
EmplaceConstructible
en
X
desde
*
ranges::
begin
(
rg
)
.
rg
y
a
no se superponen
|
a. insert ( t ) para cada elemento t en rg | Caso promedio O(N) , donde N es ranges:: distance ( rg ) , caso peor O ( N· ( a. size ( ) + 1 ) ) | |
| a. insert ( il ) | a. insert ( il. begin ( ) , il. end ( ) ) | ||||
|
a_uniq.
insert
(
nh
)
(desde C++17) |
insert_return_type
|
nh
está vacío o
a_uniq.
get_allocator
(
)
|
Si nh está vacío, no tiene efecto. De lo contrario, inserta el elemento poseído por nh si y solo si no hay ningún elemento en el contenedor con una clave equivalente a nh. key ( ) . Garantiza: Si nh está vacío, inserted es false , position es end ( ) , y node está vacío. De lo contrario, si la inserción tuvo lugar, inserted es true , position apunta al elemento insertado, y node está vacío; si la inserción falló, inserted es false , node tiene el valor previo de nh , y position apunta a un elemento con una clave equivalente a nh. key ( ) | Caso promedio O(1) , peor caso O ( a_uniq. size ( ) ) | |
|
a_eq.
insert
(
nh
)
(desde C++17) |
iterator
|
nh
está vacío o
a_eq.
get_allocator
(
)
|
Si nh está vacío, no tiene efecto y retorna a_eq. end ( ) . De lo contrario, inserta el elemento poseído por nh y retorna un iterador que apunta al elemento recién insertado. Garantiza: nh queda vacío | Caso promedio O(1) , caso peor O ( a_eq. size ( ) ) | |
|
a.
insert
(
q, nh
)
(desde C++17) |
iterator
|
nh
está vacío o
a.
get_allocator
(
)
|
Si nh está vacío, no tiene efecto y retorna a. end ( ) . De lo contrario, inserta el elemento poseído por nh si y solo si no existe un elemento con clave equivalente a nh. key ( ) en contenedores con claves únicas; siempre inserta el elemento poseído por nh en contenedores con claves equivalentes. El iterador q es una sugerencia que indica dónde debería comenzar la búsqueda. Se permite a las implementaciones ignorar la sugerencia. Garantiza: nh está vacío si la inserción tiene éxito, sin cambios si la inserción falla | Un iterador que apunta al elemento con clave equivalente a nh. key ( ) | Caso promedio O(1) , caso peor O ( a. size ( ) ) |
|
a.
extract
(
k
)
(desde C++17) |
node_type
|
Elimina un elemento del contenedor con clave equivalente a k |
Un
node_type
que posee el elemento si se encuentra, de lo contrario un
node_type
vacío
|
Caso promedio O(1) , caso peor O ( a. size ( ) ) | |
|
a_tran.
extract
(
kx
)
(desde C++23) |
node_type
|
Elimina un elemento del contenedor con clave equivalente a kx |
Un
node_type
que posee el elemento si se encuentra, de lo contrario un
node_type
vacío
|
Caso promedio O(1) , caso peor O ( a_tran. size ( ) ) | |
|
a.
extract
(
q
)
(desde C++17) |
node_type
|
Elimina el elemento apuntado por q |
Un
node_type
que posee ese elemento
|
Caso promedio O(1) , caso peor O ( a. size ( ) ) | |
|
a.
merge
(
a2
)
(desde C++17) |
void |
a.
get_allocator
(
)
== a2. get_allocator ( ) |
Intenta extraer cada elemento en a2 e insertarlo en a usando la función hash y el predicado de igualdad de claves de a . En contenedores con claves únicas, si existe un elemento en a con clave equivalente a la clave de un elemento de a2 , entonces ese elemento no se extrae de a2 . Garantiza: Los punteros y referencias a los elementos transferidos de a2 se refieren a esos mismos elementos pero como miembros de a . Los iteradores que se refieren a los elementos transferidos y todos los iteradores que se refieren a a quedarán invalidados, pero los iteradores a elementos que permanecen en a2 permanecerán válidos | Caso promedio O(N) , donde N es a2. size ( ) , caso peor O ( N· ( a. size ( ) + 1 ) ) | |
| a. erase ( k ) |
size_type
|
Elimina todos los elementos con clave equivalente a k | El número de elementos eliminados | Caso promedio O ( a. count ( k ) ), caso peor O ( a. size ( ) ) | |
|
a_tran.
erase
(
kx
)
(desde C++23) |
size_type
|
Elimina todos los elementos con clave equivalente a kx | El número de elementos eliminados | Caso promedio O ( a_tran. count ( kx ) ), caso peor O ( a_tran. size ( ) ) | |
| a. erase ( q ) |
iterator
|
Elimina el elemento apuntado por q | El iterador inmediatamente posterior a q antes de la eliminación | Caso promedio O(1) , caso peor O ( a. size ( ) ) | |
|
a.
erase
(
r
)
(desde C++17) |
iterator
|
Elimina el elemento apuntado por r | El iterador inmediatamente posterior a r antes de la eliminación | Caso promedio O(1) , caso peor O ( a. size ( ) ) | |
| a. erase ( q1, q2 ) |
iterator
|
Elimina todos los elementos en el rango
[
q1
,
q2
)
|
El iterador inmediatamente posterior a los elementos eliminados antes del borrado | Caso promedio lineal en std:: distance ( q1, q2 ) , caso peor O ( a. size ( ) ) | |
| a. clear ( ) | void | Borra todos los elementos del contenedor. Garantiza que: a. empty ( ) sea true | Lineal en a. size ( ) | ||
| b. find ( k ) |
iterator
;
const_iterator
para constante
b
|
Un iterador que apunta a un elemento con clave equivalente a k , o b. end ( ) si no existe tal elemento | Caso promedio O(1) , caso peor O ( b. size ( ) ) | ||
|
a_tran.
find
(
ke
)
(desde C++17) ? |
iterator
;
const_iterator
para constante
a_tran
|
Un iterador que apunta a un elemento con clave equivalente a ke , o a_tran. end ( ) si no existe tal elemento | Caso promedio O(1) , caso peor O ( a_tran. size ( ) ) | ||
| b. count ( k ) |
size_type
|
El número de elementos con clave equivalente a k | Caso promedio O ( b. count ( k ) ), caso peor O ( b. size ( ) ) | ||
|
a_tran.
count
(
ke
)
(desde C++17) ? |
size_type
|
El número de elementos con clave equivalente a ke | Caso promedio O ( a_tran. count ( ke ) ), caso peor O ( a_tran. size ( ) ) | ||
|
b.
contains
(
k
)
(desde C++20) ? |
b. find ( k ) ! = b. end ( ) | ||||
|
a_tran.
contains
(
ke
)
(desde C++20) ? |
a_tran. find ( ke ) ! = a_tran. end ( ) | ||||
| b. equal_range ( k ) |
std::
pair
<
iterator, iterator > ;
std::
pair
<
|
Un rango que contiene todos los elementos con claves equivalentes a
k
. Devuelve
std::
make_pair
(
|
Caso promedio O ( b. count ( k ) ), caso peor O ( b. size ( ) ) | ||
|
a_tran.
equal_range
(
ke
)
(desde C++20) ? |
std::
pair
<
iterator, iterator > ;
std::
pair
<
|
Un rango que contiene todos los elementos con claves equivalentes a
ke
. Retorna
std::
make_pair
(
|
Caso promedio O ( a_tran. count ( ke ) ), caso peor O ( a_tran. size ( ) ) | ||
| b. bucket_count ( ) |
size_type
|
El número de buckets que b contiene | Constante | ||
| b. max_bucket_count ( ) |
size_type
|
Un límite superior en el número de buckets que b puede contener jamás | Constante | ||
| b. bucket ( k ) |
size_type
|
b. bucket_count ( ) > 0 |
El índice del bucket en el que se encontrarían los elementos con claves equivalentes a
k
, si existiera algún elemento de este tipo. El valor de retorno está en el rango
[
0
,
b.
bucket_count
(
)
)
|
Constante | |
| a_tran. bucket ( ke ) |
size_type
|
a_tran.
bucket_count ( ) > 0 |
El índice del bucket en el que se encontrarían elementos con claves equivalentes a
ke
, si existiera algún elemento de este tipo. El valor devuelto debe estar en el rango
[
0
,
a_tran.
bucket_count
(
)
)
|
Constante | |
| b. bucket_size ( n ) |
size_type
|
n
está en
[
0
,
b.
bucket_count
(
)
)
|
El número de elementos en el n ésimo bucket | O ( b. bucket_size ( n ) ) | |
| b. begin ( n ) |
local_iterator
;
const_local_iterator
para constante
b
|
n
está en
[
0
,
b.
bucket_count
(
)
)
|
Un iterador que hace referencia al primer elemento en el bucket. Si el bucket está vacío, entonces b. begin ( n ) == b. end ( n ) | Constante | |
| b. end ( n ) |
local_iterator
;
const_local_iterator
para constante
b
|
n
está en
[
0
,
b.
bucket_count
(
)
)
|
Un iterador que representa el valor pasado-el-final para el bucket | Constante | |
| b. cbegin ( n ) |
const_local_iterator
|
n
está en
[
0
,
b.
bucket_count
(
)
)
|
Un iterador que hace referencia al primer elemento en el cubo. Si el cubo está vacío, entonces b. cbegin ( n ) == b. cend ( n ) | Constante | |
| b. cend ( n ) |
const_local_iterator
|
n
está en
[
0
,
b.
bucket_count
(
)
)
|
Un iterador que representa el valor pasado-el-final para el bucket | Constante | |
| b. load_factor ( ) | float | El número promedio de elementos por bucket | Constante | ||
| b. max_load_factor ( ) | float | Un número positivo que el contenedor intenta mantener como límite superior para el factor de carga. El contenedor incrementa automáticamente el número de cubetas según sea necesario para mantener el factor de carga por debajo de este valor | Constante | ||
| a. max_load_factor ( z ) | void | z debe ser positivo. Puede cambiar el factor de carga máximo del contenedor, usando z como sugerencia | Constante | ||
| a. rehash ( n ) | void |
Garantiza:
a.
bucket_count
(
)
>=
|
Caso promedio lineal en a. size ( ) , caso peor O(N 2 ) | ||
| a. reserve ( n ) |
a.
rehash
(
std::
ceil
(
n / a. max_load_factor ( ) ) ) |
|
Esta sección está incompleta
Razón: Requisitos respecto a las funciones miembro. |
Biblioteca estándar
Los siguientes contenedores de la biblioteca estándar satisfacen los requisitos de UnorderedAssociativeContainer :
|
(C++11)
|
colección de claves únicas, hasheadas por claves
(class template) |
|
(C++11)
|
colección de claves, hasheadas por claves
(class template) |
|
(C++11)
|
colección de pares clave-valor, hasheados por claves, claves únicas
(class template) |
|
(C++11)
|
colección de pares clave-valor, hasheados por claves
(class template) |
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 2156 | C++11 |
el factor de carga después del rehash solo podía ser
estrictamente menor que el factor de carga máximo |
permitido ser igual |