我有这样的C ++代码:
if(rtstructure.find(varName) != rtstructure.end()) {
rtdef = rtstructure[varName];
}
其中rtstructure是std :: map,键为std :: string。
这段代码有效,但是让它两次搜索同一密钥似乎很浪费。如果我忽略分配的if大小写,则如果varName指向不存在的键,则程序将崩溃。
我可以在单个map操作中查找std :: map中的键并获取其值(如果存在),而如果不存在则崩溃吗?
最佳答案
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;
}
关于c++ - 如果键不存在,我可以从std::map获取一个值而不会崩溃吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20182001/