在 C++ 中对向量进行排序

sort a pair vector in c++

本文关键字:排序 向量 C++      更新时间:2023-10-16
#include "bits/stdc++.h"
using namespace std;
int main()
{
int i,j;
vector< pair<int,int> > v;
    v.push_back(make_pair(4,2));
    v.push_back(make_pair(1,3));
    v.push_back(make_pair(5,4));
sort(v.begin(), v.end());
for(i=0;i<v.size();i++)
    cout<<v[i].first<<" "<<v[i].second<<endl;
}

上述代码的输出为---

1 3 
4 2
5 4

我们可以从输出中看到排序函数已经对 v[i].first 进行了排序,但是如果我们只想对 v[i].second 进行排序,或者如果我们想要对它们进行排序,那么如何完成任务呢?

指定自定义比较器。在 C++14 中,可以非常简洁地完成:

sort(v.begin(), v.end(), [](const auto& x, const auto& y){return x.second < y.second;});

std::sort()函数接受比较函数对象作为参数:

template<class RandomIt, class Compare> void sort(
    RandomIt first, RandomIt last, Compare comp);

pair second成员的工作比较函数是:

bool cmp(const std::pair<int,int>& a, const std::pair<int,int>& b) {
    return a.second < b.second;
}
默认情况下,

它会像程序一样根据第一个元素进行排序。但是,您可以传递第三个参数作为您定义的比较器进行排序,以执行您想做的任何事情......

您可以拥有自己的比较器来对正确的元素进行排序:-

struct sort_second {
    bool operator()(const std::pair<int,int> &left, const std::pair<int,int> &right) {
        return left.second < right.second;
    }
};
std::sort(v.begin(), v.end(), sort_second());