En C++17, std::map
et std::unordered_map
a obtenu un nouveau membre-modèle de fonction: try_emplace()
. Ce nouvel ajout, proposé dans n4279, se comporte de façon similaire à l' emplace()
, mais a les avantages suivants:
-
try_emplace()
ne bouge pas de rvalue arguments si l'insertion ne se fait pas. Ceci est utile lors de la manipulation de cartes dont les valeurs sont déplacer seulement les types, tels que l'std::unique_ptr
. -
try_emplace()
traite de la clé et de la arguments aumapped_type
séparément, ce qui le rend un peu plus intuitive que générique des mutateurs, qui sont exprimés en termes devalue_type
(ce qui eststd::pair
).
Étant donné les avantages ci-dessus, auriez-vous jamais les utiliser, emplace()
de C++11 au lieu de try_emplace()
de C++1z lors de l'écriture de C++1z-seul le code?