📜  更大<pair<int,int> &gt; - C++ (1)

📅  最后修改于: 2023-12-03 15:40:11.285000             🧑  作者: Mango

更大<pair<int,int>> - C++

在程序设计中,我们经常需要比较两个数的大小,而在一些场合下,这个大小是通过比较两个数的某个属性来实现的。在C++中,我们可以使用pair这个自定义类型来存储两个数据,并且可通过比较第一个数来实现对一对数对的大小排序。

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包含两个成员变量:firstsecond,分别表示一对数对的第一个元素和第二个元素。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);  // 通过比较第一个元素实现排序
使用更大的pair

有时候,我们需要进行反向排序,即按第一个元素的从大到小排序而非从小到大。这时,我们只需在定义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以存储更大的数据类型。