0

我试过这段代码

 #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

我很困惑。我记得我以前有这个工作。

4

2 回答 2

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;
}
于 2013-02-13T06:57:56.543 回答
1
int a = parent_map[0];

0正在使用 key和 default value为 map 分配一个新条目0

您实际上是在这样做:

parent_map[0] = int();

您要做的是find()地图中的键,并检查它不是容器的末尾

if(parent_map.find(0) != parent_map.end())
{
  // Element exists.
}
于 2013-02-13T06:50:08.067 回答