deduction guides for
std::map
|
Défini dans l'en-tête
<map>
|
||
|
template
<
class
InputIt,
class
Comp
=
std::
less
<
/*iter-key-t*/
<
InputIt
>>
,
|
(1) | (depuis C++17) |
|
template
<
class
Key,
class
T,
|
(2) | (depuis C++17) |
|
template
<
class
InputIt,
class
Alloc
>
map
(
InputIt, InputIt, Alloc
)
|
(3) | (depuis C++17) |
|
template
<
class
Key,
class
T,
class
Alloc
>
map
(
std::
initializer_list
<
std::
pair
<
Key, T
>>
, Alloc
)
|
(4) | (depuis C++17) |
|
template
<
ranges::
input_range
R,
class
Compare
=
std::
less
<
/*range-key-t*/
<
R
>
,
class
Alloc
=
std::
allocator
<
/*range-to-alloc-t*/
<
R
>>
>
|
(5) | (depuis C++23) |
|
template
<
ranges::
input_range
R,
class
Alloc
>
map
(
std::
from_range_t
, R
&&
, Alloc
)
|
(6) | (depuis C++23) |
|
Alias de types d'aide uniquement d'exposition
|
||
|
template
<
class
InputIt
>
using
/*iter-val-t*/
=
|
( exposition uniquement* ) | |
|
template
<
class
InputIt
>
using
/*iter-key-t*/
=
|
( exposition uniquement* ) | |
|
template
<
class
InputIt
>
using
/*iter-mapped-t*/
=
|
( exposition uniquement* ) | |
|
template
<
class
InputIt
>
using
/*iter-to-alloc-t*/
=
|
( exposition uniquement* ) | |
|
template
<
ranges::
input_range
Range
>
using
/*range-key-t*/
=
|
(depuis C++23)
( exposition uniquement* ) |
|
|
template
<
ranges::
input_range
Range
>
using
/*type-mappé-de-plage*/
=
|
(depuis C++23)
( exposition uniquement* ) |
|
|
template
<
ranges::
input_range
Range
>
using
/*range-to-alloc-t*/
=
|
(depuis C++23)
( exposition uniquement* ) |
|
map
afin de permettre la déduction à partir d'une plage d'itérateurs (surcharges
(1,3)
) et
std::initializer_list
(surcharges
(2,4)
).
map
afin de permettre la déduction à partir d'un tag
std::from_range_t
et d'un
input_range
.
Ces surcharges participent à la résolution de surcharge seulement si
InputIt
satisfait
LegacyInputIterator
,
Alloc
satisfait
Allocator
, et
Comp
ne satisfait pas
Allocator
.
Note : la mesure dans laquelle la bibliothèque détermine qu'un type ne satisfait pas
LegacyInputIterator
n'est pas spécifiée, sauf qu'au minimum les types entiers ne sont pas qualifiés comme itérateurs d'entrée. De même, la mesure dans laquelle elle détermine qu'un type ne satisfait pas
Allocator
n'est pas spécifiée, sauf qu'au minimum le type membre
Alloc::value_type
doit exister et l'expression
std::
declval
<
Alloc
&
>
(
)
.
allocate
(
std::
size_t
{
}
)
doit être bien formée lorsqu'elle est traitée comme un opérande non évalué.
Notes
| Macro de test de fonctionnalité | Valeur | Std | Fonctionnalité |
|---|---|---|---|
__cpp_lib_containers_ranges
|
202202L
|
(C++23) | Construction et insertion compatibles avec les gammes ; surcharge ( 5,6 ) |
Exemple
#include <map> int main() { // std::map m1 = {{"foo", 1}, {"bar", 2}}; // Erreur : la liste d'initialisation entre accolades n'a pas de type ; // impossible de déduire pair<Key, T> à partir de {"foo", 1} ou {"bar", 2} std::map m1 = {std::pair{"foo", 2}, {"bar", 3}}; // guide #2 std::map m2(m1.begin(), m1.end()); // guide #1 }
Rapports de défauts
Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.
| DR | S'applique à | Comportement publié | Comportement corrigé |
|---|---|---|---|
| LWG 3025 | C++17 | les guides d'initialisation ( 2,4 ) prennent std:: pair < const Key, T > | utilisent std:: pair < Key, T > |