5

我有一个使用 std::map 的循环模式。

我只想在键存在时检索值,否则我不想插入元素。目前我正在使用count(key)or find(key)(哪个更好?从文档来看,复杂性似乎是一样的),如果它们返回一个正值,我访问地图。但是我想避免在地图上使用两个操作。就像是:

map<string, int> myMap;
int returnvalue;
boole result = myMap.get("key1",returnValue)
if(result){
  \\ use returnValue
}

阅读cplusplus.com上的 std::map 文档,我发现了两个用于访问地图元素的函数:

  • at():如果密钥不存在,则抛出异常
  • []:如果键不存在,则插入一个新值

它们都不能满足我的需要。

4

2 回答 2

14

使用map::find

auto it = myMap.find(key);

if (it != myMap.end())
{
    // use it->second
}
else
{
    // not found
}

这部分很容易。更难的问题是当你想查找一个元素是否存在并且如果存在就返回它,否则在那个键处插入一个新元素,所有这些都不需要搜索映射两次。为此,您需要使用lower_bound后跟暗示插入。

于 2013-10-10T08:31:59.607 回答
0

使用count()确定密钥存在,然后用于find()获取 k/v 对

if (myMap.count(key))
{
    auto it = myMap.find(key)
}
else
{
// not found
}
于 2013-10-10T08:38:20.283 回答