1. 程式人生 > >C++排序函式中cmp()比較函式詳解

C++排序函式中cmp()比較函式詳解

  1. 整型資料比較
bool cmp(int a,int b){
    return a < b;
}
int a[10];  
sort(a,a+10,cmp);
  1. 實型資料比較
bool cmp(float a,float b){
    return a < b;
}
int a[10];  
sort(a,a+10,cmp);
  1. 結構體型別比較

題目:有N個學生的資料,將學生資料按成績高低排序,如果成績相同則按姓名字元的字母序排序,如果姓名的字母序也相同則按照學生的年齡排序,並輸出N個學生排序後的資訊。
題目連結( 九度OJ的):http://ac.jobdu.com/problem.php?pid=1061


核心程式碼:

struct student
{
    int grade;
    char name[101];
    int age;
}stu[1001];


bool cmp(student a,student b)
{
    int t = strcmp(a.name,b.name);
    if(a.grade != b.grade) 
        return a.grade < b.grade; 
    else if(t != 0)
        return t < 0; 
    else
        return a.age < b.age;
}

sort(stu,stu+n,cmp);

關於cmp函式引數中的&符號(轉)

關於sort函式中的cmp函式有著不同的寫法,以剛剛的整形元素比較為例
還有人是這麼寫的:

bool cmp(const int &a, const int &b){  
    return a>b;  
}  

int a[10];  
sort(a,a+10,cmp); 

思考:int 和const int&有什麼區別呢?
原來:作為函式引數:int這種寫法是值傳遞,const int&則是引用傳遞
“值傳遞”——由於函式將自動產生臨時變數用於複製該引數,效率較低。
“引用傳遞”僅借用一下引數的別名而已,不需要產生臨時物件。效率較高


tips:“引用傳遞”有可能改變引數,const修飾可以解決這個問題。
檢視更多http://blog.sina.com.cn/s/blog_76e067cf01019q5r.html

補充知識:C中qsort中的cmp()與sort的cmp()對比(以int為例)

名稱 返回值型別 語句
qsort(c) int return a - b
sort(c++) bool return a < b