terminate called after throwing an instance of 'std::out_of_range' what(): unordered_map::at
时间: 2024-09-13 09:00:59 浏览: 129
php-fpm超时时间设置request_terminate_timeout资源问题分析
`std::out_of_range`异常是在你尝试访问一个容器(例如`std::unordered_map`)的元素时,而该元素不存在于容器中时抛出的。具体到`std::unordered_map::at`方法,它是一个检查式的访问方法,当你使用`at`方法来获取一个键对应的值时,如果该键在`unordered_map`中不存在,它会抛出`std::out_of_range`异常。
`std::unordered_map::at`与`std::unordered_map::operator[]`的主要区别在于,`at`方法会检查键是否存在,如果不存在会抛出异常,而`operator[]`在键不存在时会插入一个新元素(其默认值通常是初始化时类型默认构造的值),并不会抛出异常。
例如:
```cpp
std::unordered_map<int, std::string> myMap;
myMap[1] = "one"; // 如果键1不存在,将创建键1并赋值为"one"
std::cout << myMap.at(1); // 正常输出 "one"
std::cout << myMap[2]; // 键2不存在,将会插入键2并赋默认值,然后输出默认值
std::cout << myMap.at(2); // 由于键2默认值不是预期的字符串,将会抛出std::out_of_range异常
```
解决这类问题的方法通常是确保在使用`at`之前,键确实存在于`unordered_map`中。你可以先使用`find`方法来检查键是否存在。
阅读全文