如何在C ++中创建元组的unordered_map?
在C ++中,unordered_map是一种非常强大的数据结构,可以用于快速访问键值对。但是,当我们需要使用元组作为键时,unordered_map的使用会稍微复杂一些。本文将介绍如何在C ++中创建元组的unordered_map。
什么是元组?
元组是C ++中的一种数据结构,它可以将多个值组合在一起。元组可以包含任何类型的值,例如整数,浮点数,字符串甚至自定义类型。在我们的程序中,我们经常需要从函数中返回多个值,此时元组将会变得非常有用。
下面是一个简单的示例,其中我们使用元组将两个整数组合在一起:
#include <tuple>
#include <iostream>
int main()
{
std::tuple<int, int> myTuple(10, 20);
std::cout << std::get<0>(myTuple) << std::endl; // 打印10
std::cout << std::get<1>(myTuple) << std::endl; // 打印20
return 0;
}
在上面的示例中,我们使用std :: tuple来创建一个两个整数的元组。然后,我们可以使用std :: get函数检索元组中的值。
什么是unordered_map?
unordered_map是C ++中非常常用的数据结构之一。在unordered_map中,每个键关联一个值。与std :: map不同,unordered_map不按照键的值进行排序。因为unordered_map是使用哈希表实现的,所以可以在常数时间内查找键。下面是一个unordered_map的简单示例:
#include <unordered_map>
#include <iostream>
int main()
{
std::unordered_map<std::string, int> myMap;
myMap["a"] = 1;
myMap["b"] = 2;
myMap["c"] = 3;
std::cout << myMap["a"] << std::endl; // 打印1
std::cout << myMap["b"] << std::endl; // 打印2
std::cout << myMap["c"] << std::endl; // 打印3
return 0;
}
在上面的示例中,我们使用std :: unordered_map创建一个从字符串到整数的映射。我们可以将值插入映射中,并使用[]运算符访问映射中的值。
元组的unordered_map
现在我们知道了元组和unordered_map是什么,那么元组的unordered_map将是什么呢?元组的unordered_map将是一个从元组到值的映射。在C ++中,我们可以使用std :: tuple作为unordered_map的键。
下面是一个示例程序,其中我们使用元组的unordered_map存储与每个唯一键关联的字符串和整数。请注意,当我们在unordered_map中使用元组作为键时,我们可以自定义比较运算符,以便在比较两个元组时,unordered_map可以正确地运行。
#include <tuple>
#include <unordered_map>
#include <iostream>
struct TupleHash {
template <class T1, class T2>
std::size_t operator () (const std::tuple<T1, T2>& tuple) const {
std::hash<T1> hash1;
std::hash<T2> hash2;
return
hash1(std::get<0>(tuple)) ^
hash2(std::get<1>(tuple));
}
};
bool operator == (const std::tuple<std::string, int>& lhs, const std::tuple<std::string, int>& rhs) {
return
std::get<0>(lhs) == std::get<0>(rhs) &&
std::get<1>(lhs) == std::get<1>(rhs);
}
int main()
{
std::unordered_map<
std::tuple<std::string, int>,
int,
TupleHash> myMap;
myMap[std::make_tuple("a", 1)] = 10;
myMap[std::make_tuple("b", 2)] = 20;
myMap[std::make_tuple("c", 3)] = 30;
std::cout << myMap[std::make_tuple("a", 1)] << std::endl; // 打印10
std::cout << myMap[std::make_tuple("b", 2)] << std::endl; // 打印20
std::cout << myMap[std::make_tuple("c", 3)] << std::endl; // 打印30
return 0;
}
在上面的示例中,我们使用std :: tuple作为unordered_map的键。我们创建一个自定义哈希函数和自定义比较运算符,以确保我们的键是独特的。我们创建了一个从元组到整数的映射,然后将一些数字插入映射中并访问了一些数字。请注意,我们使用std :: make_tuple来创建元组。
结论
现在您知道如何在C ++中创建元组的unordered_map了。在使用元组作为键时,我们需要定义自定义哈希函数和比较运算符,以确保我们的键在unordered_map中是唯一的。使用元组的unordered_map可以方便我们在C ++中存储和访问与每个唯一元组相关联的值。