есть ли техническая причина для этого?
Да.Цель try_emplace()
- ничего не делать, если ключ уже существует на карте.Но для std::{unordered_,}multi{map,set}
вы можете иметь несколько значений для каждой клавиши.В этом и заключается смысл этих контейнеров: иметь несколько значений для данного ключа.
В результате try_emplace()
не может завершиться ошибкой для этих контейнеров - поэтому было бы сложно и бессмысленно предоставлять такиефункция.
Судя по комментариям, кажется, что мотивация - это только часть try_emplace()
, которая облегчает использование значения.Для этого вы можете написать вспомогательную функцию:
template <typename Map, typename Key, typename... Args>
auto emplace_value(Map& map, Key&& key, Args&&... args) {
return map.emplace(std::piecewise_construct,
std::forward_as_tuple(std::forward<Key>(key)),
std::forward_as_tuple(std::forward<Args>(args)...));
}
, которая позволит вам написать emplace_value(tmap, 10, 10, 10)
, даже для {unordered_,}multimap
.