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 ответа

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;
}
int a = parent_map[0];

Назначение новой записи на карту с ключом 0и значение по умолчанию 0,

Вы по существу делаете это:

parent_map[0] = int();

Что вы хотите сделать, это find() ключ на карте, и убедитесь, что это не конец контейнера.

if(parent_map.find(0) != parent_map.end())
{
  // Element exists.
}
Другие вопросы по тегам