📜  如何在 C++ 中创建元组的 unordered_map?

📅  最后修改于: 2022-05-13 01:55:05.640000             🧑  作者: Mango

如何在 C++ 中创建元组的 unordered_map?

元组– 元组是一个可以包含多个元素的对象。元素可以是不同的数据类型。元组的元素按照访问顺序初始化为参数。

Unordered Map不包含元组的散列函数。因此,如果我们想要散列一个元组,那么我们必须显式地为它提供一个可以散列一个元组的散列函数。

unordered_map 最多可以有 5 个参数:

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

hash_function 可以是任何东西,只要它可以散列给定的键。

句法:

C++
// CPP program to demonstrate implementation
// of unordered_map for a tuple.
  
#include 
using namespace std;
  
// A hash function used to hash a tuple
struct hash_tuple {
  
    template 
  
    size_t operator()(
        const tuple& x)
        const
    {
        return get<0>(x)
               ^ get<1>(x)
               ^ get<2>(x);
    }
};
  
int main()
{
  
    // Sending the hash function
    // as a third argument
    unordered_map,
                  bool, hash_tuple>
        mapOfTuple;
  
    // Creating some tuples to be used as keys
    tuple t1(100, 200, 300);
    tuple t2(400, 500, 600);
    tuple t3(700, 800, 900);
  
    // Inserting values
    // in the unordered_map
    mapOfTuple[t1] = true;
    mapOfTuple[t2] = false;
    mapOfTuple[t3] = true;
  
    cout << "Contents of the unordered_map: \n";
    for (auto p : mapOfTuple)
        cout << "[" << get<0>(p.first) << ", "
             << get<1>(p.first) << ", "
             << get<2>(p.first)
             << "] ==> " << p.second << "\n";
  
    return 0;
}


输出
Contents of the unordered_map: 
[700, 800, 900] ==> 1
[100, 200, 300] ==> 1
[400, 500, 600] ==> 0