使用时 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 ++中,对流控制使用异常处理并不是惯用的,这是第二个代码示例正在进行的操作。它将使维护者更难理解代码,并且根据具体的编译器,它可能不会表现得那么好。
我建议使用秘密选项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 ++中,对流控制使用异常处理并不是惯用的,这是第二个代码示例正在进行的操作。它将使维护者更难理解代码,并且根据具体的编译器,它可能不会表现得那么好。