我尝试了这段代码
#include <iostream>
#include <utility>
#include <vector>
#include <unordered_map>
#include <stdexcept>
using namespace std;
int main() {
unordered_map<int,int> parent_map;
try {
int a = parent_map[0];
cout<<a<<endl;
} catch (out_of_range oe) {
cout<<"out of range"<<endl;
}
return 0;
}
我认为应该抓住超出范围的例外情况。但是,输出是
0
我很困惑。我记得我之前有过这个工作。
答案 0 :(得分:5)
operator[]
没有抛出,您想尝试std::unordered_map::at
int a = parent_map.at(0);
如果找不到密钥,operator[]
将插入元素。
您希望通过引用捕获异常
catch (const out_of_range &oe) {
cout<<"out of range: " << oe.what() <<endl;
}
答案 1 :(得分:1)
int a = parent_map[0];
使用键0
和默认值0
为地图指定新条目。
你基本上是这样做的:
parent_map[0] = int();
您要做的是find()
地图中的键,并检查它不是容器的结束。
if(parent_map.find(0) != parent_map.end())
{
// Element exists.
}