📜  如何在C++中创建成对的unordered_map?

📅  最后修改于: 2021-05-30 03:12:06             🧑  作者: Mango

无序映射不像对int, 字符串等那样包含一个对的哈希函数,因此,如果我们要对一个哈希对进行哈希处理,则必须显式为其提供可以对一个哈希对进行哈希处理的哈希函数。 unordered_map最多可以使用5个参数:

  • 键:键值的类型
  • 值:要针对键存储的值的类型
  • 散列函数:用于散列给定密钥的函数。如果未提供,则使用默认哈希函数。
  • PRED:这是用来使得没有两个密钥可以具有相同散列值的函数
  • Alloc:用于定义映射的内存模型的对象

hash_function可以是任何东西,只要它可以哈希给定的键即可。

先决条件:如何创建用户定义类的unordered_map?

// CPP program to demonstrate implementation of
// unordered_map for a pair.
#include 
using namespace std;
  
// A hash function used to hash a pair of any kind
struct hash_pair {
    template 
    size_t operator()(const pair& p) const
    {
        auto hash1 = hash{}(p.first);
        auto hash2 = hash{}(p.second);
        return hash1 ^ hash2;
    }
};
  
int main()
{
    // Sending the hash function as a third argument
    unordered_map, bool, hash_pair> um;
  
    // Creating some pairs to be used as keys
    pair p1(1000, 2000);
    pair p2(2000, 3000); 
    pair p3(2005, 3005); 
      
    // Inserting values in the unordered_map.
    um[p1] = true;
    um[p2] = false;
    um[p3] = true;
  
    cout << "Contents of the unordered_map : \n";
    for (auto p : um)
        cout << "[" << (p.first).first << ", " 
             << (p.first).second << "] ==> "
             << p.second << "\n";
  
    return 0;
}
输出:
Contents of the unordered_map : 
[1000, 2000] ==> 1
[2005, 3005] ==> 1
[2000, 3000] ==> 0

注意:我们可以为一对创建地图。签出一对地图。原因是,映射基于自平衡BST,并且不需要哈希函数。

练习题: Nikhil是一名旅行推销员,如今他正在新地区参观房屋以出售百科全书。新城市位于x * y(1 <= x <= 10 ^ 9,1 <= y <= 10 ^ 9)的网格中,每个交叉点处都有房屋。现在,他对记住已经拜访过的房屋不太满意,因此每当他进入房屋时,他都会告诉您房屋的坐标。您的工作是记住座标,并在一天结束时告诉他当天他所参观的所有房屋。

例子:

要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程”