c++ std::map -无异常和无插入的元素访问

blmhpbnm  于 2023-07-01  发布在  其他
关注(0)|答案(3)|浏览(128)

我有一个使用std::map的循环模式。
我只想在键存在的时候检索值,否则我不想插入元素。目前我正在使用count(key)find(key)(哪个更好?)从文档的复杂性似乎是相同的),如果他们返回一个正值,我访问的Map。但是我想避免在Map上使用两个操作。类似于:

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

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

  • at():如果键不存在,则抛出异常
  • (http://www.cplusplus.com/reference/map/map/operator%5B%5D):如果键不存在,则插入新值

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

eaf3rand

eaf3rand1#

使用map::find

auto it = myMap.find(key);

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

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

ht4b089n

ht4b089n2#

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

if (myMap.count(key))
{
    auto it = myMap.find(key)
}
else
{
// not found
}
kx7yvsdv

kx7yvsdv3#

目前,可以使用contains来检查元素是否存在。

相关问题