对包含 pair<x,y 的向量进行排序>

Sorting a vector that contains pair<x,y>

本文关键字:向量 gt 排序 pair 包含 lt      更新时间:2023-10-16

我在某处看到过一个代码,其中一个人做了这样的事情

#define pp pair<int,int>
int main()
{
  int n,i;
  scanf("%d",&n);
  vector<pp> G;
  for(i=0;i<n;i++)
  {
     int x,y;
     scanf("%d%d",&x,&y);
     G.push_back(pp(x+y,x-y));
  }
  sort(G.begin(),G.end());

我想知道这里是如何完成排序的。我的意思是说在包含对的向量中执行什么参数排序

sort函数根据比较函数(定义顺序)进行排序。人们可能想要指定使用哪个omparaison,但是如果未指定比较函数(如您的情况),则sort使用defet作为所考虑对象的<运算符

因此,在您的情况下,可以订购,因为比较运算符已重载std::pair

这些操作符的行为描述如下 http://en.cppreference.com/w/cpp/utility/pair/operator_cmp:

因此,在排序时,将调用std::pair类上的<运算符,并且您的对将按字典顺序排序

(0,1) < (0,2) < (1,0) < (1,2) < (2,7)

检查此链接:http://www.cplusplus.com/reference/utility/pair/operators/

类似地,运算符 <、>、<= 和>= 对由成员第一和第二形成的序列执行字典顺序比较。

所以,a < b意味着(a.first < b.first) || (a.first == b.first && a.second < b.second)