首页 > 解决方案 > 如何使用数组的值初始化 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]]++;

在这里,我不知道如何在地图中插入键和值

标签: c++c++11hashmap

解决方案


在这里, Inunordered_maphash[arr[i]]++;这种方式工作:

  1. 它搜索一个键 (arr[i])。如果找到,则相应的值增加1.

  2. 如果未找到,将使用 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}]

这里提到的顺序可能与实际顺序不同。上面的解释只是为了解释事情。


推荐阅读