C++ map_instance[key]与map_instance.find(key)在c++;

C++ map_instance[key]与map_instance.find(key)在c++;,c++,c++11,C++,C++11,我有一张地图定义为 static map<unsigned int, deque<FOO_STRUCT*> > CV_MAP; map\u实例[key]将默认为键key构造一个新值(如果它不存在) 与中一样,如果键不存在,它将调用deque的构造函数,并返回新构造的deque 使用find成员函数不会为给定的键构造新值——当该键不存在时,它只会返回一个指向CV_MAP.end()的迭代器 使用适合您的用例的内容。map\u实例[key]-返回参考(如果需要,在构建新元

我有一张地图定义为

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

map\u实例[key]
将默认为键
key
构造一个新值(如果它不存在)

与中一样,如果
键不存在,它将调用
deque
的构造函数,并返回新构造的
deque

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


使用适合您的用例的内容。

map\u实例[key]
-返回参考(如果需要,在构建新元素之前)
map\u instance.find(key)
-return迭代器
map\u instance[key]
最好是将默认初始化的key放入map中(如果不存在的话),或者对它做些什么(如果存在的话)

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

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]++;
   }
}

两者并不等同。问你需要什么,我想问一下,但是你在问之前看过这些方法的描述吗?也许你需要?是的,我一定误解了文档,对不起,我对C++非常陌生。
for(auto x : array){
   if ( map_instance.find(key) == map_instance.end() ) {
      map_instance[x] = 0;
   }
   else{
      map_instance[x]++;
   }
}