我有这样的C ++代码:

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


其中rtstructure是std :: map,键为std :: string。
这段代码有效,但是让它两次搜索同一密钥似乎很浪费。如果我忽略分配的if大小写,则如果varName指向不存在的键,则程序将崩溃。

我可以在单个map操作中查找std :: map中的键并获取其值(如果存在),而如果不存在则崩溃吗?

最佳答案

find给您一个保存/指向std::map<>::iteratorstd::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;
}

关于c++ - 如果键不存在,我可以从std::map获取一个值而不会崩溃吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20182001/

10-11 17:53