对内部有 2 对的向量进行排序

Sorting a vector with 2 pairs inside

本文关键字:排序 向量 内部      更新时间:2023-10-16

好吧,我有一个向量,成对>,我想知道他是如何进行排序的? with sort(v.begin((,v.end(((;

using namespace std;
int main(){
   int n; cin >> n;
   vector<pair<pair<int,int>, pair<int,int>>> v;
   for(int i=0;i<n;i++){
      long long x1,y1,x2,y2;
      cin>>x1>>y1>>x2>>y2;
      v.push_back(make_pair(make_pair(x1,y1),make_pair(x2,y2)));
   }   
   sort(v.begin(),v.end());
   for(auto& p : v){
      cout<<p.first.first<<" "<<p.first.second<<" "<<p.second.first<<" "<<p.second.second<<"n";
  }
   return 0;
}

输入:

4   
5 19 8 17
5 15 15 5
0 20 20 0
8 10 10 8

输出:

0 20 20 0
5 15 15 5
5 19 8 17
8 10 10 8

对于类std::pair,有定义的运算符

template<class T1, class T2>
constexpr bool operator< (const pair<T1, T2>&, const pair<T1, T2>&);

按以下方式行事

返回: x.第一个 <x.first(>< y.秒(。

例如,对于两对类型std::pair<std::pair<int, int>, std::pair<int, int>>

{ { 5, 19 }, { 8, 17 } }
  ^^^^^^^^^

{ { 5, 15 }, { 15, 5 } }
  ^^^^^^^^^

首先,使用相同的operator <比较{ 5, 19 }{ 5, 15 }对。

由于第二对

小于第一对,则第二对将在结果向量中的第一对之前。

例如,如果它们(第一对(彼此相等

{ { 5, 15 }, { 8, 17 } }
  ^^^^^^^^^

{ { 5, 15 }, { 15, 5 } }
  ^^^^^^^^^

然后比较第二对。因为{ 8, 17 }对小于{ 15, 5 }所以第一对小于第二对。

{ 8, 17 }{ 15, 5 }对使用相同的模板operator <进行比较。

如果包含的类型支持通过operator<进行比较,std::pair定义一个operator<,并且您使用的是int,因此默认情况下提供它。

std::sort使用此operator<按字典顺序对元素进行排序。

如果使用未定义operator<的任意类型,则必须提供自己的比较器以std::sort