当我想确保要使用的条目存在时,我通常会这样做。
#include <unordered_map>
struct type { int member; };
std::unordered_map<type> map;
if (map.find(key) != map.end())
map[key].member = 42;但是,我认为它在哈希映射中对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;第一种选择感觉更有表现力。真的慢了吗?
发布于 2014-09-20 16:25:53
除非有特定的理由保留现有条目中的值(如果它已经存在),否则可以完全跳过第一次搜索,只需设置新值:
#include <unordered_map>
struct type { int member; };
std::unordered_map<key_t, type> map;
map[key].member = 42;这将修改现有条目(如果有),并在不存在的情况下插入新条目。
https://stackoverflow.com/questions/25950207
复制相似问题