c++ - 如何使用数组的值初始化 unordered_map
问题描述
我遇到了一个让我感到困惑的代码,一个 unordered_map 的初始化如下所示
std::unordered_map<std::string, int> wordMap;
// Inserting elements through an initializer_list
wordMap.insert({ {"First", 1}, {"Second", 2}, {"Third", 3} } );
但令我惊讶的是下面的代码
int arr[] = { 1, 5, 2, 1, 3, 2, 1 };
unordered_map<int, int> hash;
for (int i = 0; i < n; i++)
hash[arr[i]]++;
在这里,我不知道如何在地图中插入键和值
解决方案
在这里, Inunordered_map
以hash[arr[i]]++;
这种方式工作:
它搜索一个键 (arr[i])。如果找到,则相应的值增加
1
.如果未找到,将使用 key 创建一个新元素,
arr[i]
并且因为 value 是 type ,所以为其存储int
默认值。0
由于++
运算符,它会加一。因此,在操作结束时,值将是1
。
为了对您的示例非常明确,它的工作原理如下:
i = 0 => arr[i] = 1 => Not present in map => New pair added => hash: [{1, 1}]
i = 1 => arr[i] = 5 => Not present in map => New pair added => hash: [{1, 1}, {5, 1}]
i = 2 => arr[i] = 2 => Not present in map => New pair added => hash: [{1, 1}, {5, 1}, {2, 1}]
i = 3 => arr[i] = 1 => Present in map => Existing pair updated => hash: [{1, 2}, {5, 1}, {2, 1}]
i = 4 => arr[i] = 3 => Not present in map => New pair added => hash: [{1, 2}, {5, 1}, {2, 1}, {3, 1}]
i = 5 => arr[i] = 2 => Present in map => Existing pair updated => hash: [{1, 2}, {5, 1}, {2, 2}, {3, 1}]
i = 6 => arr[i] = 1 => Present in map => Existing pair updated => hash: [{1, 3}, {5, 1}, {2, 2}, {3, 1}]
这里提到的顺序可能与实际顺序不同。上面的解释只是为了解释事情。
推荐阅读
- c - 仅使用 gl.h 和 glu.h 编程 OpenGL
- python - 如何在Python中进行曲线下积分和阴影积分区域?
- c# - UWP:TextBox inside Button,如何防止SpaceBar触发Click事件?
- python - 如何在颜色条中间设置具有最小值的连续正颜色条范围
- casting - 转换为未调整大小的类型:`std::io::Stdout` as `std::io::Write` 错误
- javascript - 移动和桌面的不同事件
- python - 通过python进行文本解析
- r - 为什么并行 foreach 的求解速度异常缓慢?
- nsis - 如何强制 ReadRegStr 读取 32 位节点?
- r - 在 r + dplyr 中复制 Excel MAXIFS 函数