想要检查unordered_map中是否存在密钥。目前我使用count()
成员函数。如果它大于0,则表示密钥存在。
想知道是否可以执行以下操作:
typedef std::unordered_map< long, long > m;
m[100] = 20;
m[1000] = 200;
...
//get user input x as an integer
if (m[x] == 0) {
//do something
}
上述代码的问题在于,对于不存在的密钥x
,if (m[x] == 0)
会向地图添加一个条目。我需要的是,[]
运算符返回默认值(例如&#34; 0&#34;当类型为long,int,如果类型为字符串则为空字符串对象)如果键不是&# 39; t存在(只是不添加条目)。在我的情况下,unordered_map条目的值不为零。不知道如何覆盖这个运营商。有任何想法吗?谢谢。
答案 0 :(得分:3)
请改用.find()
。 if (map.find(key) != map.end())
然后它存在于地图中。否则if (map.find(key) == map.end())
它不存在。
答案 1 :(得分:3)
我需要的是,[]运算符返回默认值(例如&#34; 0&#34;当类型为long,int,如果类型为字符串则为空字符串对象)如果键不是&# 39;存在(只是不添加条目)
你可以自己编写这样的功能 - 你不需要覆盖任何东西:
template <typename K, typename T, typename H, typename KE, typename A>
T value_or_default(const std::unordered_map<K,T,H,KE,A>& map,
const K& key,
T def = T{})
{
auto it = map.find(key);
return it != map.end() ? it->second : def;
}