📅  最后修改于: 2023-12-03 15:40:11.285000             🧑  作者: Mango
在程序设计中,我们经常需要比较两个数的大小,而在一些场合下,这个大小是通过比较两个数的某个属性来实现的。在C++中,我们可以使用pair
这个自定义类型来存储两个数据,并且可通过比较第一个数来实现对一对数对的大小排序。
pair
是一个用来表示一对数对的类,定义在头文件<utility>
中。pair
的定义如下:
template<class T1, class T2>
struct pair {
typedef T1 first_type;
typedef T2 second_type;
T1 first;
T2 second;
pair() : first(T1()), second(T2()) {}
pair(const T1& x, const T2& y) : first(x), second(y) {}
template<class U1, class U2>
pair(const pair<U1, U2>& p) : first(p.first), second(p.second) {}
};
即pair
包含两个成员变量:first
和second
,分别表示一对数对的第一个元素和第二个元素。C++ 标准库还提供了一些针对pair
类型的操作函数,例如make_pair()
等。
在对一对数对进行排序时,常常需要比较其第一个元素的大小。此时,我们只需定义好operator<()
运算符,即可使用sort()
等函数进行排序操作。
bool operator<(const pair<int, int>& a, const pair<int, int>& b) {
return a.first < b.first;
}
通过像上面这样定义好operator<()
运算符,我们便可以使用sort()
函数对pair
类型所组成的数组arr
进行排序:
pair<int, int> arr[10];
sort(arr, arr + 10); // 通过比较第一个元素实现排序
有时候,我们需要进行反向排序,即按第一个元素的从大到小排序而非从小到大。这时,我们只需在定义operator<()
运算符时,将比较运算符改为大于号即可:
bool operator<(const pair<int, int>& a, const pair<int, int>& b) {
return a.first > b.first; // 改为大于号
}
同样地,我们也可以使用更大的pair
,只需在定义时将其模板参数改为需要存储的数据类型即可:
pair<long long, long long> a, b;
通过定义pair
类型并实现operator<()
运算符,我们可以轻松实现对一对数对的排序操作。此外,我们还可以使用更大的pair
以存储更大的数据类型。