c++ - 这是否因为两次查找而不是一次查找而变慢?

标签 c++ performance lookup unordered-map

当我想确保我要使用的条目存在时,我通常会这样做。

#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/

相关文章:

php - 按另一个预定义的、非详尽的数字数组对数字数组进行排序,然后升序排序

c++ - Eigen::Ref 用于连接矩阵

c++ - 在 Tensorflow C++ API 中初始化变量

c++ - 有人可以用简单的英语解释智能指针吗?

javascript - 最小化作用域链的长度会提高性能吗?

apache-spark - Spark 中查找和联接之间的区别

c++ - 缓存行中存储了多少数组?

c++ - 具有 boost 变体的静态多态性单访问者与多访问者与动态多态性

performance - CATiledLayer 用按钮绘制巨大的 UIView?

namespaces - 在 TCL 中访问命名空间变量的最快方法