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

difference between map_instance[key] vs. map_instance.find(key) in c++

本文关键字:key instance map 之间 区别 C++ find      更新时间:2023-10-16

我有一个地图定义为

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

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

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

>如果键key不存在,map_instance[key]将默认构造一个新值。

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

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

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

map_instance[key]- 返回引用(如果需要,在构造新元素之前)map_instance.find(key)- 返回迭代器

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