c++ - map::count 后跟 map::operator[] 的效率

标签 c++ stl c++-standard-library

有一种已知的问题,当映射包含一些元素并且需要访问该元素时,虽然“找不到元素”的情况更倾向于通过 if-check 来处理,但仍然缺乏一个标准方法轻松“请让我访问映射到给定键的元素,通过一些有意义的值告诉我它不存在,否则让我访问它”。

我的目标是:我需要一个干净、简单的方法,代码看起来不错,可读性强,当然还有效率。这是执行此操作的“官方”方式:

map<int, vector<Command> > m;
map<int, vector<Command> >::iterator i = m.find(required_key);
if ( i == m.end() )
     error_not_found();
i->second.SetCode(x);

这是我使用的,并且由于可读性而更喜欢 - 我的问题是:这种方法相对于上面的官方方法效率有多低:

map<int, vector<Command> > m;
if ( !m.count(required_key) )
   error_not_found();
m[required_key].SetCode(x);

最佳答案

明显的效率损失是查找必须进行两次,而在“官方”代码中,它只进行一次。对于大型 map 上的许多访问,这将是显而易见的。还要注意,即使“官方”代码的可读性可能较低,它仍然是众所周知的,并且它也适用于只读 map 。 C++11s auto 可能有助于提高可读性。

关于c++ - map::count 后跟 map::operator[] 的效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31805998/

相关文章:

c++ - 类的成员访问

c++ - 简单数据类型的互斥锁

C++ 执行策略不适用于 std::map

c++ - 生成范围内的随机数,不重复

c++:如何在构造函数中初始化std::pair的成员

c++ - 获取给定地址的 std::vector 元素的索引

c++ - 语句 "x = map[keyPotentiallyNotYetInMap]"有什么用吗?

c++ - std::set(红/黑树)前向迭代是如何实现的?

C++:为什么 weak_ptr 没有 shared_ptr&& 构造函数?

c++ - C++ 标准库是否定义了圆周率?