当我想确保我要使用的条目存在时,我通常会这样做。
#include <unordered_map>
struct type { int member; };
std::unordered_map<type> map;
if (map.find(key) != map.end())
map[key].member = 42;
但是,我认为它在 HashMap 中对 key
执行了两次查找。这会缓存查找。
#include <unordered_map>
struct type { int member; };
std::unordered_map<type> map;
auto find = map.find(key);
if (find != map.end())
find->second.member = 42;
第一个选项感觉更具表现力。真的慢吗?
最佳答案
它可能会更慢,也可能不会(您现在在“加速”中进行了额外的编写),但是在编写代码时真的不应该担心这种微小的优化。编写清晰的表达代码。然后,如果您的程序确实太慢,请在其上运行分析工具并找到您的瓶颈。如果这段代码是实际上是一个真正的问题,那么只有在那时尝试你的“加速”,看看它是否重要。
关于c++ - 这是否因为两次查找而不是一次查找而变慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25950207/