c ++中map_instance [key]与map_instance.find(key)之间的区别

时间:2017-10-01 22:55:14

标签: c++ c++11

我有一张定义为

的地图
static map<unsigned int, deque<FOO_STRUCT*> > CV_MAP; 

我想知道一种方法是否比另一种方法更好:

map_instance[key] vs. map_instance.find(key).

3 个答案:

答案 0 :(得分:1)

如果密钥map_instance[key]不存在,

key将默认构建新值。

如果deque<FOO_STRUCT*>不存在,它会调用key的构造函数,并返回新构造的deque<FOO_STRUCT*>

使用find成员函数不会为给定键构造新值 - 当键不存在时,它将返回指向CV_MAP.end()的迭代器。

使用适合您用例的内容。

答案 1 :(得分:0)

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> <p style='position:relative;'>Move This</p> <div style='height:100px;width:100px;border:1px solid black;margin-top:200px;'></div> - 返回参考(之前,如果需要,请构建新元素) map_instance[key] - 返回迭代器

答案 2 :(得分:0)

map_instance[key]可以是首选的,只要您关注的是将默认初始化的密钥放入地图中(如果不存在),或者如果存在则执行某些操作。

考虑一种情况,您希望在数组中存储每个元素的计数。

for(auto x : array){
   map_instance[x]++;  //no need to find here at first. 
}

正如您所看到的,它确实简化了您的代码,并删除了if-else子句。

for(auto x : array){
   if ( map_instance.find(key) == map_instance.end() ) {
      map_instance[x] = 0;
   }
   else{
      map_instance[x]++;
   }
}