В С++ 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?