C++中sort排序之自定義排序cmp(入門)


咳咳,第一次寫這種博客,介紹一下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的進階我也不是太了解,等以后遇到問題了再說吧,夠用就行,后面再更新哦!溜了溜了。
文中的問題可以到評論區評論,收到消息后,我會及時改正哦!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM