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キーとデフォルト値を使用して、マップに新しいエントリを割り当てています0

あなたは本質的にこれをやっています:

parent_map[0] = int();

あなたがしたいことはfind()マップのキーであり、それがコンテナの終わりではないことを確認してください。

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