如果密钥不存在,我可以从std :: map获取值而不会崩溃吗?

时间:2013-11-24 22:35:54

标签: c++

我有这样的C ++代码:

if(rtstructure.find(varName) != rtstructure.end()) {
    rtdef = rtstructure[varName];
}

其中rtstructure是std :: map,带有std :: string作为键。 这段代码可以工作,但是对于同一个密钥进行两次搜索似乎是一种浪费。如果我省略了赋值的if情况,程序会在varName指向不存在的键时崩溃。

我是否可以在单个地图操作中查找std :: map中的某个键并获取其值(如果存在),如果它不存在则不会崩溃?

1 个答案:

答案 0 :(得分:5)

find为您提供std::map<>::iterator持有/指向std::pair<>。迭代器可以保存并重用(假设您没有做任何事情来使它失效,例如erase)。

// i don't know the type of rtstructure so i use auto
// you can replace it to the correct type if C++11 is not available
auto it = rtstructure.find(varName); 
if(it != rtstructure.end()) {
    rtdef = it->second;
}