英文:
Extra std::map::contains call vs handling an exception?
问题
Which is more efficient in C++?
if (my_map.contains(my_key)) return my_map.at(my_key);
or
try { return my_map.at(my_key); } catch (std::out_of_range e) { ... }
英文:
What is more efficient in c++?
if (my_map.contains(my_key)) return my_map.at(my_key);
or
try { return my_map.at(my_key); } catch (std::out_of_range e) { ... }
?
答案1
得分: 6
最有效的方法是使用std::map<>::find
:
if (auto it = my_map.find(my_key); it != my_map.end()) return *it;
这避免了先进行contains
然后再进行at
的双重查找,以及在at
抛出异常时产生的昂贵的异常处理。
英文:
The most efficient way is to use std::map<>::find
:
if (auto it = my_map.find(my_key); it != my_map.end()) return *it;
Which avoids the double lookup for contains
followed by at
and the expensive exception handling for if at
throws
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论