我有一个使用std :: map的重复模式。
我想只在密钥存在时检索值,否则我不想插入元素。目前我正在使用count(key)
或find(key)
(哪一个更好?从文档中复杂度似乎相同),如果它们返回一个正值,我访问地图。但是我想避免在地图上使用两个操作。类似的东西:
map<string, int> myMap;
int returnvalue;
boole result = myMap.get("key1",returnValue)
if(result){
\\ use returnValue
}
在cplusplus.com上阅读std :: map文档我找到了两个访问地图元素的函数:
它们都不能满足我的需要。
答案 0 :(得分:9)
使用map::find
:
auto it = myMap.find(key);
if (it != myMap.end())
{
// use it->second
}
else
{
// not found
}
这部分很简单。更难的问题是当你想要查找一个元素是否存在并返回时,如果它存在,但是否则在该键上插入一个新元素,所有这些都不会搜索地图两次。为此,您需要使用lower_bound
,然后使用提示插入。
答案 1 :(得分:0)
使用count()
确保密钥存在
然后使用find()
获取k / v对
if (myMap.count(key))
{
auto it = myMap.find(key)
}
else
{
// not found
}