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