当 wordCount 中不存在键时,我应该对 unordered_map<string, int> 使用 ++wordCount[key] 吗?
should I use ++wordCount[key] for unordered_map<string, int> when key doesn't exist in wordCount?
请参阅下面的代码:
unordered_map<string, int> wordCount;
for(string word: words)
++wordCount[word];
问题:
当wordCount中不存在单词时,它就在这里用于使用++wordCount[word];
吗?我总是看到有人这样使用,但我真的不确定。
此处说明:
如果k与容器中任何元素的键都不匹配,则函数插入带有该键的新元素并返回引用到其映射值。请注意,这总是会增加容器即使没有为元素分配映射值(元素是使用其默认构造函数构造的)。
我知道int在默认情况下是未初始化的。所以,我认为这样直接增加地图值是不安全的,是吗?
在operator[]
上引用cppreference的文档
当使用默认分配器时,这将导致从键复制构建键,并初始化映射值。
关键字是初始化的值。值初始化的int
为零。
以下是官方参考资料(C++14,23.5.4.3第2段,[unord.map.elem]):
效果:如果
unordered_map
尚未包含键等效于k
的元素,则第一个运算符插入值value_type(k, mapped_type())
,第二个运算符插入值CCD_ 7。
注意mapped_type()
,对于mapped_type = int
,它将构造一个零值的int
。
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- C++:TypeDef使用元组
- 使用std::multimap迭代器创建std::list
- 从不同线程使用int64的不同字节安全吗
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 为什么在全局范围内使用"extern int a"似乎不行?
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 如何使用Google Mock来模拟gettimeofday()
- 如何使用默认参数等选择模板专业化
- 为什么使用 "this" 指针调用派生成员函数?
- 使用新行和不使用新行读取文件
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 如何确定我已使用非编码文件到达 EOF?
- 如何在cuSparse中使用cusparseXcoo2csr从coo转换为csc
- 使用CMake创建QML插件
- 是否需要使用 - &gt;运算符在C 中调用成员函数时
- 错误,包括&lt; ctype&gt;在原子上使用C 11
- 使用shared_ptr<字符串>转换为一个无序集合<字符串>
- 使用 std::vector<boost::shared_ptr<Base_Class>> 或 boost::p tr_vector 的性能注意事项是什么<Base>