unordered_map判断密钥是否在地图中

时间:2013-02-13 06:47:16

标签: c++ g++ linked-list unordered-map

我尝试了这段代码

 #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

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

2 个答案:

答案 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.
}