sort是acm比赛中常用的排序函数
毕竟自己排序写费时费力,最后写出来还不如sort快…
sort其实也挺多的sort,stable_sort,partial_sort,partial_sort_copy…
一般用到的有两种
sort | 不稳定排序 | 排序会改变元素初始位置 |
---|---|---|
stable_sort | 稳定排序 | 排序不会改变元素初始位置 |
用法
//a是数组
sort(a,a+n);//对数组a中下标0到n-1的区间升序排序
sort(a+1,a+n+1);//对数组a中下标1到n的区间升序排序
sort默认是升序排序的
当然也可以降序
sort(a,a+n,greater());//对数组a中下标0到n-1的区间降序排序
对于int,long,double等等变量都可以排序
而对于结构体…他不知道该如何比较,也就无法排序
这个时候就需要写自定义排序函数了
无论是自定义排序函数还是运算符重载其实就是让计算机知道如何比较你定义的结构体的大小,从而进行排序
struct node{
int l,r;
};
bool cmp(node a,node b){//按l升序,如果l相等按r升序 更复杂的排序同理
if(a.l==b.l){
return a.l<b.l;
}
return a.r<b.r;
}
sort(s,s+n,cmp);
运算符重载
至于什么是运算符重载…哈哈…略
struct node{
int l,r;
bool operator<(const node b)const{//作用和上面的自定义排序函数一样 按l升序,如果l相等按r升序
if(l!=b.l){
return l<b.l;
}
return r<b.r;
}
};
sort(s,s+n,cmp);
//运算符重载的结构一般是
bool operator<(const node x)const{//x可以是任意名字 node是结构体名
//中间写排序规则
}