Я хочу написать функцию для получения значения ключа в std::map
, и, если ключ отсутствует в карте, вернуть значение по умолчанию, очень похожее на dict.get(key, default)
.
в Python.
Итак, я написал:
template <class K, class V>
const V& GetMapValueOrDefault(const typename std::map<K, V>& map_, const K& k, const V& default_)
{
auto it = map_.find(k);
if (it == map_.end())
return default_;
return it->second;
}
Это работает до тех пор, пока я не запущу следующий код:
std::map<int, ClassA> map_; // map_ no contains key 1
const auto &value = GetMapValueOrDefault(map_, 1, ClassA());
// value.blablabla
Я получаю ошибку, потому что GetMapValueOrDefault
возвращает временную переменную, на которую ссылается value
, и затем временная переменная уничтожается. Так что value
является недействительной ссылкой.
Как правильно написать эту функцию?
Я не хочу GetMapValueOrDefault(..., V default_)
, потому что иногда копия не нужна.