Logo
Section 1 / 2

对(std::pair)

成对的值在编程中非常实用。C++ 允许我们创建这样的数据对。

导入

对(std::pair)

成对的值在编程中非常实用。C++ 允许我们创建这样的数据对。

使用 std::pair,你可以构建任意类型的元素对。类模板 std::pair 需要包含头文件 <utility>。std::pair 提供了默认构造函数、拷贝构造函数和移动构造函数。std::pair 对象之间可以交换:通过 std::swap(pair1, pair2) 实现。

std::pair 在 C++ 标准库中被广泛使用。例如,函数 std::minmax 将其结果以 std::pair 的形式返回;关联式容器 std::map、std::unordered_map、std::multimap 和 std::unordered_multimap 都使用 std::pair 来管理键值对。

要访问 std::pair 对象 p 中的元素,可以直接通过成员访问,也可以通过索引获取。使用 p.first 或 std::get<0>(p) 可以获取第一个元素,使用 p.second 或 std::get<1>(p) 可以获取第二个元素。

std::pair 支持比较操作符 ==、!=、<、>、<= 和 >=。当比较两个 std::pair 是否相等时,首先比较 pair1.first 与 pair2.first,然后比较 pair1.second 与 pair2.second。其他比较操作也遵循相同的规则。

std::make_pair

C++ 提供了一个便捷的辅助函数 std::make_pair,用于在不显式指定类型的情况下创建 std::pair 对象。std::make_pair 能够自动推导出模板参数类型。

1// pair.cpp 2#include <iostream> 3#include <utility> 4using namespace std; 5 6int main(){ 7 pair<const char*, double> charDoub("str", 3.14); 8 pair<const char*, double> charDoub2 = make_pair("str", 3.14); 9 auto charDoub3 = make_pair("str", 3.14); 10 11 cout << charDoub.first << ", " << charDoub.second << "\n"; // str, 3.14 12 charDoub.first = "Str"; 13 get<1>(charDoub) = 4.14; 14 cout << charDoub.first << ", " << charDoub.second << "\n"; // Str, 4.14 15 16 return 0; 17}

在下一节中,我们将介绍 C++ 中的元组(tuple)。

函数适配器

元组