В С++ 17 std::map
и std::unordered_map
получили новый шаблон функции-члена: try_emplace()
. Это новое дополнение, предложенное в n4279, ведет себя аналогично emplace()
, но имеет следующие преимущества:
-
try_emplace()
не перемещается из аргументов rvalue, если вставка не происходит. Это полезно при работе с картами, значения которых являются типами только для перемещения, такими какstd::unique_ptr
. -
try_emplace()
обрабатывает ключ и аргументыmapped_type
отдельно, что делает его несколько более интуитивным, чем универсальные мутаторы, которые выражаются в терминахvalue_type
(который являетсяstd::pair
).
Учитывая вышеперечисленные преимущества, вы когда-нибудь использовали бы emplace()
из С++ 11 вместо try_emplace()
из С++ 1z при написании кода только для С++ 1z?