gpt4 book ai didi

c++ - 如何完成像 python dict.get 这样的 get_map_or_default

转载 作者:行者123 更新时间:2023-11-30 04:52:46 25 4
gpt4 key购买 nike

我想写一个函数来获取 std::map 中某个键的值,如果键不在 map 中,则返回一个默认值,很像 python 的 dict .get( key ,默认值)

所以我写道:

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_) 因为有时不需要拷贝。

最佳答案

您可以通过将其设为可变引用来强制 default_ 不是临时的。

template <class K, class V>
const V& GetMapValueOrDefault(const typename std::map<K, V>& map_, const K& k, V& default_)
{
auto it = map_.find(k);
if (it == map_.end())
return default_;
return it->second;
}

关于c++ - 如何完成像 python dict.get 这样的 get_map_or_default,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54146448/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com