如何在 C++ 中创建元组的 unordered_map?
元组– 元组是一个可以包含多个元素的对象。元素可以是不同的数据类型。元组的元素按照访问顺序初始化为参数。
Unordered Map不包含元组的散列函数。因此,如果我们想要散列一个元组,那么我们必须显式地为它提供一个可以散列一个元组的散列函数。
unordered_map 最多可以有 5 个参数:
- Key :键值的类型。
- Value :要针对键存储的值的类型。
- 散列函数:用于散列给定键的函数。如果未提供,则使用默认散列函数。
- Pred :一个函数,用于使没有两个键可以具有相同的哈希值。
- Alloc :用于定义映射的内存模型的对象。
hash_function 可以是任何东西,只要它可以散列给定的键。
句法:
unordered_map
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
Note: It is not required to pass a hash function in the map which is a self-balancing BST. In order words, map