📜  在C++标准模板库(STL)中配对(1)

📅  最后修改于: 2023-12-03 14:51:15.359000             🧑  作者: Mango

在C++标准模板库(STL)中配对

C++标准模板库(STL)被广泛应用于C++开发中的数据结构和算法领域。其中一个重要的概念是配对(pair),它可以用来表示两个值的有序序列,例如键-值对。在STL中,有许多与配对相关的容器和算法,本文将介绍其中几个。

std::pair

std::pair是一个模板类,可以容纳两个不同类型的值,并将它们打包成一个数据结构。例如,我们可以定义一个std::pair来保存一个姓名和一个年龄:

std::pair<std::string, int> person("John", 25);

上面的代码创建了一个名为person的std::pair对象,它将一个std::string值“John”与一个int值25配对。在需要使用多个值的情况下,可以使用std::pair作为返回类型,这是一种方便的方法,可以轻松地将两个值作为单个值返回。例如,如果需要返回一个函数的名称和版本号,可以定义一个std::pair类型的返回值:

std::pair<std::string, std::string> getFunctionInfo() {
    return std::make_pair("myFunction", "1.0");
}
std::map

std::map是一个关联容器,其元素以键-值对的形式存储。每个键必须是唯一的,而每个值则可以与一个键相关联。std::map通常是使用平衡二叉树实现的,因此可以提供O(log n)的搜索时间。

以下是一个使用std::map保存学生姓名和分数的示例:

std::map<std::string, int> scores;
scores["Alice"] = 90;
scores["Bob"] = 80;
scores["Charlie"] = 95;

在上面的代码中,创建了一个名为scores的std::map对象,并使用键-值对存储了三个学生的姓名和分数。可以通过键访问每个学生的分数,例如:

std::cout << "Charlie's score is " << scores["Charlie"] << std::endl;
std::multimap

std::multimap是一个允许重复键的关联容器,它与std::map基本相同,但一个键可以被映射到多个值。当需要两个或多个对象映射到相同的键时,可以使用std::multimap。

以下是一个示例,展示如何在std::multimap中存储电话号码:

std::multimap<std::string, std::string> phoneNumbers;
phoneNumbers.insert(std::make_pair("Alice", "123-456-7890"));
phoneNumbers.insert(std::make_pair("Bob", "456-789-0123"));
phoneNumbers.insert(std::make_pair("Charlie", "123-456-7890"));

现在,Alice和Charlie都有相同的电话号码“123-456-7890”,因此可以通过键“123-456-7890”访问两个学生的姓名。

std::pair和std::tie的结合使用

std::pair和std::tie可以很好地结合使用,可以在函数中返回多个值。例如,使用std::tie将std::pair的值解包到单独的变量中:

std::pair<std::string, int> person("John", 25);
std::string name;
int age;
std::tie(name, age) = person;

上面的代码创建了一个名为person的std::pair,然后使用std::tie将其值解包到变量name和age中。

总结

std::pair是一个方便的数据结构,可用于保存两个值。std::map是一个关联容器,可用于将键映射到唯一的值。std::multimap是一个允许重复键的关联容器。std::tie可以将std::pair的值解包到单独的变量中,常常用于函数返回多个值的情况。