【问题标题】:How are hash maps implemented in c++?哈希映射是如何在 C++ 中实现的?
【发布时间】:2020-08-31 10:56:57
【问题描述】:

mymap[key]++ 是如何可视化的。我是在增加键还是值?

在 LINE 1 hash[numberToFind] 中是我要插入结果的键还是值?

    unordered_map<int, int> hash;
    vector<int> result;
    for (int i = 0; i < arr.size(); i++) {
        int numberToFind = target - arr[i];
        if (hash.find(numberToFind) != hash.end()) {
            result.push_back(hash[numberToFind]); //LINE 1
            result.push_back(i);        
            return result;
        }

【问题讨论】:

  • 等等,这是你的代码,还是你找到但不理解的代码?
  • 这是我找到但不理解的代码。我正在尝试了解地图是如何在问题中实现的

标签: c++ c++11 hash


【解决方案1】:

在 stackoverflow.com 上提问之前,请考虑参考一个好的参考。 cppreference.com 不错。

https://en.cppreference.com/w/cpp/container/unordered_map

  1. key 是关键。

  2. mymap[key] 在键 key 处返回对 mymap 中元素的引用。

  3. 如果key 尚未在mymap 中,mymap[key] 默认会在key 处构造一个元素,然后返回对它的引用。

  4. mymap[key]++ 在键 key 处增加 mymap 中的元素。上面的规则仍然成立:如果key 尚未在mymap 中,则在mymap 中的键key 处默认构造一个元素,然后递增。

  5. myvec.push_back(mymap[key])key 创建值的副本,并将其添加到myvec 的末尾。复制push_back 工作原理的函数。 push_back 仅将元素的副本添加到向量的末尾。上面的规则仍然成立:如果key 还没有在mymap 中,则在mymap 中的键key 处默认构造一个元素,然后复制到myvec 中。

  6. numbers[i] 是对std::vector&lt;int&gt; numbers 中的ith 元素的引用。如果该索引处还没有元素,则向量不会默认在该索引处创建元素。相反,访问越界索引是未定义的行为。

  7. hash[x] 是对 std::unordered_map&lt;int, int&gt; hash 中键 x 的元素的引用。如有必要,默认创建,如上所述。

  8. hash[numbers[i]] 是对 hash 中键 numbers[i] 的元素的引用。如有必要,默认创建如上。

  9. hash[numbers[i]] = i; 将键 numbers[i]hash 中的元素设置为 i 的值。

【讨论】:

    猜你喜欢
    • 2012-02-11
    • 2013-08-05
    • 2021-07-22
    • 1970-01-01
    • 1970-01-01
    • 2011-06-24
    • 2023-01-18
    • 1970-01-01
    • 2016-01-25
    相关资源
    最近更新 更多