deduction guides for
std::unordered_map
|
Definido en el encabezado
<unordered_map>
|
||
|
template
<
class
InputIt,
class
Hash
=
std::
hash
<
/*iter-key-t*/
<
InputIt
>>
,
|
(1) | (desde C++17) |
|
template
<
class
Key,
class
T,
class
Hash
=
std::
hash
<
Key
>
,
class
Pred
=
std::
equal_to
<
Key
>
,
|
(2) | (desde C++17) |
|
template
<
class
InputIt,
class
Alloc
>
unordered_map
(
InputIt, InputIt,
typename
/* ver abajo */
::
size_type
, Alloc
)
|
(3) | (desde C++17) |
|
template
<
class
InputIt,
class
Alloc
>
unordered_map
(
InputIt, InputIt, Alloc
)
|
(4) | (desde C++17) |
|
template
<
class
InputIt,
class
Hash,
class
Alloc
>
unordered_map
(
InputIt, InputIt,
typename
/* ver abajo */
::
size_type
, Hash,
|
(5) | (desde C++17) |
|
template
<
class
Key,
class
T,
typename
Alloc
>
unordered_map
(
std::
initializer_list
<
std::
pair
<
Key, T
>>
,
|
(6) | (desde C++17) |
|
template
<
class
Key,
class
T,
typename
Alloc
>
unordered_map
(
std::
initializer_list
<
std::
pair
<
Key, T
>>
, Alloc
)
|
(7) | (desde C++17) |
|
template
<
class
Key,
class
T,
class
Hash,
class
Alloc
>
unordered_map
(
std::
initializer_list
<
std::
pair
<
Key, T
>>
,
|
(8) | (desde C++17) |
|
template
<
ranges::
input_range
R,
class
Hash
=
std::
hash
<
/*range-key-t*/
<
R
>>
,
|
(9) | (desde C++23) |
|
template
<
ranges::
input_range
R,
class
Alloc
>
unordered_map
(
std::
from_range_t
, R
&&
,
|
(10) | (desde C++23) |
|
template
<
ranges::
input_range
R,
class
Alloc
>
unordered_map
(
std::
from_range_t
, R
&&
, Alloc
)
|
(11) | (desde C++23) |
|
template
<
ranges::
input_range
R,
class
Hash,
class
Alloc
>
unordered_map
(
std::
from_range_t
, R
&&
,
typename
/* ver más abajo */
::
size_type
,
|
(12) | (desde C++23) |
|
Alias de tipos auxiliares solo para exposición
|
||
|
template
<
class
InputIt
>
using
/*iter-val-t*/
=
|
( solo para exposición* ) | |
|
template
<
class
InputIt
>
using
/*iter-key-t*/
=
|
( solo para exposición* ) | |
|
template
<
class
InputIt
>
using
/*iter-mapped-t*/
=
|
( solo para exposición* ) | |
|
template
<
class
InputIt
>
using
/*iter-to-alloc-t*/
=
|
( solo para exposición* ) | |
|
template
<
ranges::
input_range
Range
>
using
/*range-key-t*/
=
|
(desde C++23)
( solo para exposición* ) |
|
|
template
<
ranges::
input_range
Range
>
using
/*range-mapped-t*/
=
|
(desde C++23)
( solo para exposición* ) |
|
|
template
<
ranges::
input_range
Range
>
using
/*range-to-alloc-t*/
=
|
(desde C++23)
( solo para exposición* ) |
|
unordered_map
para permitir la deducción desde un rango de iteradores (sobrecargas
(1,3-5)
) y
std::initializer_list
(sobrecargas
(2,6-8)
).
unordered_map
para permitir la deducción a partir de una etiqueta
std::from_range_t
y un
input_range
.
Estas sobrecargas participan en la resolución de sobrecarga solo si
InputIt
satisface
LegacyInputIterator
,
Alloc
satisface
Allocator
, ni
Hash
ni
Pred
satisfacen
Allocator
, y
Hash
no es un tipo integral.
Nota: el grado en que la biblioteca determina que un tipo no satisface
LegacyInputIterator
no está especificado, excepto que como mínimo los tipos integrales no califican como iteradores de entrada. Del mismo modo, el grado en que determina que un tipo no satisface
Allocator
no está especificado, excepto que como mínimo el tipo miembro
Alloc::value_type
debe existir y la expresión
std::
declval
<
Alloc
&
>
(
)
.
allocate
(
std::
size_t
{
}
)
debe estar bien formada cuando se trata como un operando no evaluado.
El
size_type
tipo de parámetro en estas guías se refiere al
size_type
tipo miembro del tipo deducido por la guía de deducción.
Notas
| Macro de prueba de características | Valor | Estándar | Característica |
|---|---|---|---|
__cpp_lib_containers_ranges
|
202202L
|
(C++23) | Construcción e inserción conscientes de rangos; sobrecargas ( 9-12 ) |
Ejemplo
#include <unordered_map> int main() { // std::unordered_map m1 = {{"foo", 1}, {"bar", 2}}; // Error: la lista de inicialización entre llaves no tiene tipo: no se puede // deducir pair<Key, T> de {"foo", 1} o {"bar", 2} std::unordered_map m1 = {std::pair{"foo", 2}, {"bar", 3}}; // guía #2 std::unordered_map m2(m1.begin(), m1.end()); // guía #1 }
Informes de defectos
Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.
| DR | Aplicado a | Comportamiento publicado | Comportamiento correcto |
|---|---|---|---|
| LWG 3025 | C++17 | las guías de lista de inicialización ( 2 ) y ( 6-8 ) toman std:: pair < const Key, T > | usan std:: pair < Key, T > |