有一种已知的问题,当映射包含一些元素并且需要访问该元素时,虽然“找不到元素”的情况更倾向于通过 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/