哈希映射如何在 c++ 中实现?

How are hash maps implemented in c++?

本文关键字:实现 c++ 映射 哈希      更新时间:2023-10-16

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

在第 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;
}

在询问 stackoverflow.com 之前考虑去一个好的参考,cppreference.com 很好。

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

  1. key是关键。

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

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

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

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

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

  7. hash[x]是对键xstd::unordered_map<int, int> hash元素的引用。如有必要,默认创建如上所述。

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

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