C++:std::pair的定义及用法
std::pair
是 C++ 标准库中的一个模板类,用于将两个不同类型的值组合在一起。它在 <utility>
头文件中定义。std::pair
可以存储一对相关的数据项,可以是不同类型的数据,也可以是相同类型的数据。它通常用于返回多个值的函数,或者在需要将两个相关的值一起处理的场景中。
可以简单理解为python中大小为2的元祖
std::pair
的定义
#include <utility> // 包含 std::pair 的定义template <typename T1, typename T2>
struct pair {T1 first; // 第一个元素T2 second; // 第二个元素// 默认构造函数pair();// 带参数的构造函数pair(const T1& a, const T2& b);// 拷贝构造函数pair(const pair& other);// 移动构造函数pair(pair&& other) noexcept;// 赋值运算符pair& operator=(const pair& other);pair& operator=(pair&& other) noexcept;
};
成员变量
first
:第一个元素,类型为T1
。second
:第二个元素,类型为T2
。
构造函数
- 默认构造函数:
pair()
初始化first
和second
为默认值。 - 带参数的构造函数:
pair(const T1& a, const T2& b)
用给定的值初始化first
和second
。 - 拷贝构造函数:用于复制
std::pair
对象。 - 移动构造函数:用于将另一个
std::pair
对象的资源转移到新对象中。 - 赋值运算符:用于赋值操作,包括拷贝赋值和移动赋值。
常见操作
-
创建和初始化
std::pair
:
#include <iostream>
#include <utility> // 包含 std::pairint main() {std::pair<int, std::string> p1(1, "apple"); // 创建一个 pair<int, std::string>std::cout << "First: " << p1.first << ", Second: " << p1.second << std::endl;std::pair<int, std::string> p2; // 使用默认构造函数p2.first = 2;p2.second = "banana";std::cout << "First: " << p2.first << ", Second: " << p2.second << std::endl;return 0;
}
2. 使用 std::make_pair
创建 std::pair
:
#include <iostream>
#include <utility> // 包含 std::pair 和 std::make_pairint main() {auto p = std::make_pair(3, "cherry"); // 自动推断类型std::cout << "First: " << p.first << ", Second: " << p.second << std::endl;return 0;
}
3.比较 std::pair
:
std::pair
支持以下比较操作符:==
, !=
, <
, <=
, >
, >=
,它们基于 first
和 second
成员进行逐个比较。
#include <iostream>
#include <utility> // 包含 std::pairint main() {std::pair<int, std::string> p1(1, "apple");std::pair<int, std::string> p2(2, "banana");if (p1 < p2) {std::cout << "p1 is less than p2" << std::endl;} else {std::cout << "p1 is not less than p2" << std::endl;}return 0;
}
用途
- 返回多个值:
std::pair
常用于函数返回多个值。例如,std::map
的std::pair
用于存储键值对。 - 存储关联数据:用于存储两个相关的但不同的数据项,如坐标点(
std::pair<int, int>
)或学生的信息(std::pair<std::string, double>
,其中第一个是名字,第二个是成绩)。
总结
std::pair
是一个方便的工具,用于将两个相关的值组合在一起。它提供了简单的接口来访问和操作这两个值,并支持基本的比较操作。通过使用 std::pair
,可以轻松地管理和传递相关的值对。