一般来说比较函数写在结构体内会比写在外部快
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)