咳咳,第一次寫這種博客,介紹一下sort的自定義排序cmp函數:
sort和cmp的實現需要的頭文件有:
#include<algorithm>
using namespace std;
sort()是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/Mangata/p/12253112.html不用謝我(逃)
至於cmp的進階我也不是太了解,等以后遇到問題了再說吧,夠用就行,后面再更新哦!溜了溜了。
文中的問題可以到評論區評論,收到消息后,我會及時改正哦!