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

如何在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 ++中存储和访问与每个唯一元组相关联的值。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程