咳咳,第一次写这种博客,介绍一下sort的自定义排序cmp函数:
sort和cmp的实现需要的头文件有:
#include<algorithm>
using namespace std;
sor()是C++标准库中的排序函数,使用很方便,传进去数组的起始和结束地址就行,注意是左闭右开,默认的排序是<,从小到大,不过可以自己写一个cmpare()来自定义,下面缩写cmp()函数。
cmp()函数的返回值要是bool,核心之处也是比较,因为sort默认是从小到大,所以在cmp如果还是要从小到大,那就a < b,返回值bool为true,不改变;而如果想要从大到小排,那么就要return a > b,因为默认a小于b,所以此时返回的bool就是false,要改变排序。
如果你不懂的话 ,不,聪明的你肯定懂了。下面我先给一个例子:
eg;
#include<algorithm> using namespace std; bool cmp(int a,int b) { return a>b;//从大到小排序 }
当然如果定义的是一个结构体想进行排序,也是一样的
eg;
#include<algorithm> using namespace std; struct node//结构体定义 { int a; int b; int c; }; bool cmp(node x,node y)//这个cmp是先按照a进行降序排序,如果a相同然后对b升序排序,如果b相同最后对c降序排序 { if(x.a!=y.a) return x.a<y.a; if(x.b!=y.b) return x.b>y.b; if(x.c!=y.c) return x.c<y.c; }
这个cmp是先按照a进行降序排序,如果a相同然后对b升序排序,如果b相同最后对c降序排序 。是不是很简单,这只是比较低级的自定义排序
先附上一道例题:
http://www.fjutacm.com/Problem.jsp?pid=1214
题解:https://www.cnblogs.com/YHH520/p/12253112.html 不用谢我(逃)
https://www.dotcpp.com/oj/problem1568.html
题解:https://paste.ubuntu.com/p/c8wD8BWwg2/
至于cmp的进阶我也不是太了解,等以后遇到问题了再说吧,够用就行,后面再更新哦!溜了溜了。
文中的问题可以到评论区评论,收到消息后,我会及时改正哦!
原文地址:https://www.cnblogs.com/YHH520/p/12253671.html