C++ 中 map_instance[key] 与 map_instance.find(key) 之间的区别
difference between map_instance[key] vs. map_instance.find(key) in c++
我有一个地图定义为
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]++;
}
}
相关文章:
- C++ Singleton - Prevent ::instance() to variable
- DrawIndexedInstanced 具有不同的 Index Count per Instance (Directx
- 如果 KEY 是 std::list 或 std::vector 而不是值,那么 std::map 的默认行为是什么?
- 使用 Key 对 C++ 中的哈希映射进行排序. 无法排序
- std::<key-value>不同类型的对向量
- .value( "key" , default) 不适用于空的 json 对象吗?
- 我可以将QCoreApplication::instance()用于孤儿QObjects吗?
- std::set<Key,Compare,Allocator>::find() 函数使用"<"运算符而不是"=="运算符背后的直觉是什么?
- std::move(key) 同时迭代unordered_map<字符串,字符串>?
- cpp / c ++中的grpc客户端代码,元数据x-api-key/x-goog-api-key不起作用,给了我语音A
- 黄金描述的C++ "Key Function"是什么?
- "terminate called after throwing an instance of std::invalid_argument' what(): stoi ?"
- cin.get() 导致"no instance of overloaded function"错误
- 从更新查询获取'Cannot insert duplicate key'
- 方括号在"map <string, int> instance[numberFeatures];"中是什么意思
- 尝试在虚幻引擎中通过C++添加视口时出错"No instance of overloaded function CreateWidget"
- 如何计算C++中非重复值的数量 std::map<Key,Values>
- 3D 矢量 - "No instance of overload function?"
- 不能使用矢量::插入"no instance of overloaded function..."
- SWIG:包装 std::map<key 时编译器错误,val *>