La norme C++ définit un constructeur std::map
utilisant un std::initializer_list
:std :: carte constructeur liste initialiseur
map(std::initializer_list<value_type> init, const Allocator&);
Cependant, où est défini ce qui se passe si la liste contient des clés d'initialisation en double? La première clé est-elle choisie, ou la dernière? Par exemple:
std::map<std::string, int> my_map {
{"a", 1},
{"a", 2}
};
Dans la pratique, il semble qu'il se comporte comme insert()
, de sorte que la carte contient maintenant {a: 1}.
Cependant, je n'ai pas pu trouver quoi que ce soit dans la norme C++ à ce sujet.
Techniquement, au moins à partir des parties citées, la norme ne semble pas dicter dans lequel ou der les éléments seraient insérés. – user2079303
@ user2079303 Mieux? – BoBTFish
Je ne suis pas sûr que ce soit suffisant.Certes, lorsque l'itérateur passé est simplement un itérateur d'entrée, ils doivent être insérés dans l'ordre, mais l'itérateur d'initializer_list est un itérateur d'accès aléatoire et je ne vois pas de règle interdisant la spécialisation pour différents types d'itérateurs. – user2079303