map/unordered_map:首选find(),然后at()或try at() catch out_of_rang
map/unordered_map: Prefer find() and then at() or try at() catch out_of_range?
当使用std::map
或std::unordered_map
时,访问可能不在容器中的元素的最佳方式是什么?一个人应该请求允许还是请求原谅?为什么?
,
if (mymap.find(key) != mymap.end()) {
value = mymap.at(key);
// do stuff
}
else {
// do something else
}
与
try {
value = mymap.at(key);
// do stuff
}
catch(const std::out_of_range& oor) {
// do something else
}
我建议秘密选项C,避免非异常异常和做两次搜索:
MyMapType::const_iterator iter = mymap.find(key);
if(iter != mymap.end())
{
// iter is item pair in the map. The value will be accessible as `iter->second`.
}
在c++中,使用异常处理进行流控制并不是习惯用法,这是第二个代码示例所做的。它将使维护者更难理解代码,并且根据特定的编译器,它可能执行得不那么好。
相关文章:
- 如何导出包含具有"std::unique_ptr"值的"std::map"属性的
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- 使用一个考虑到std::map中键值的滚动或换行的键
- 为什么 const std::p air<K,V>& 在 std::map 上基于范围的 for 循环不起作用?
- 允许从 std::map 的密钥窃取资源?
- 如何处理来自核心指南检查器的关于gsl::at的静态分析警告
- 有没有办法对std::unordered_set、std::unrdered_map、std::set、std::map
- 使用 at() 访问 std::map 元素是否比运算符 [] 慢?
- C++11 功能 std::map::at 编译旧版本的C++
- out_of_range使用std :: map :: at(const char*),除了使用 /02编译时
- 为什么没有透明的C++1x std::map::at?
- std::map at 函数总是抛出异常
- Disable std::map::at()
- C++98 Wrapper for std::map::at()
- 地图 [] 和 map.at 在C++中的区别
- map/unordered_map:首选find(),然后at()或try at() catch out_of_rang
- 当std::map::at超出范围时返回什么
- 是c++ 11中map标准的at() const访问器
- 在预c++0x中使用map::at()
- 在map/undered_map中使用find vs.at