结构体内嵌比较函数bool operator < (const node &x) const {}

一般来说比较函数写在结构体内会比写在外部快

struct node
{
    int l,r;
    bool operator <(const node &a)const{
        return r < a.r;
    }
}a[maxn];

这种是最经典的。
r相当于当前正在比较的值,这个函数就是r从小到大排。
存储用优先队列时会相反,同是上面这个函数会按r从大到小排。

来看下多个变量排序:

struct node{
      int l,r;
     bool operator < (const node &x) const {
         if(l<=r&&x.l> x.r) return true;
         if(l> r&&x.l< x.r) return false;
          if(l<=r&&x.l<=x.r) return l<x.l;
         if(l> r&&x.l> x.r) return r>x.r;
     }
 }a[100];

相当于:

bool cmp(node x,node y){
if(x.l<=x.r&&y.l>y.r)return true;
if(x.l>x.r&&y.l<=y.r)return false;
if(x.l<=x.r&&y.l<=y.r)return x.l<y.l;
if(x.l>x.r&&y.l>y.r)return x.r<y.r;
}

四行其实是四种情况,比较的两个数一个是a,一个是b:
if(l<=r&&x.l> x.r) return true;
a是l<=r,b是l>r,那么把a排在b前
if(l> r&&x.l< x.r) return false;
a是l>r,b是l<=r,那么把a排在b后
if(l<=r&&x.l<=x.r) return l<x.l;
a是l<=r,b是l<=r,那么把l小的排在前面
if(l> r&&x.l> x.r) return r>x.r;
a是l>r,b是l>r,那么把r大的排在前面

例如
假设我要比较的数列为:
(l,r): (1,3) (4,3) (5,6) (8,2) (7,1) 那么我按照以上代码排序,排完序之后的数列是什么样的呢?
  (1,3) (5,6) (4,3) (8,2) (7,1)

参考博客https://www.cnblogs.com/ZERO-/p/9347296.html

  • 55
    点赞
  • 190
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值