C++結構體排序

deepwzh發表於2017-02-06

在C++中,對結構體的排序方式比C語言豐富的多。在C語言中,我們主要是通過qsort進行排序操作(拋開手寫排序演算法不說)。

在C++<algorithm>中,有一個十分強大的排序函式sort,他的內部綜合了許多種排序演算法,因此非常高效。並且,用它來對結構體排序也十分方便。

先貼一段示例程式碼:

 1 #include <cstdio>
 2 #include <queue>
 3 #include <vector>
 4 #include <algorithm>
 5 #include <iostream>
 6 using namespace std;
 7 struct Mi{
 8     int p;
 9     int h;
10     int c;
11     double k;
12     Mi(int p,int h,int c,int k):p(p),h(h),c(c),k(k){}
13     bool operator < (const Mi &a)const //對應less,代表升序,改變下行符號方向反之
14     {  
15         return p < a.p;
16     }
17     bool operator > (const Mi &a)const  //對應greater,代表降序、、、改變下行符號方向反之
18     {  
19         return p > a.p;
20     }
21 };
22 bool cmp(const Mi &a,const Mi &b){
23     return a < b;//<代表升序,>代表降序
24 }
25 int main(){
26         vector<Mi> vec;
27         int m;
28         scanf("%d",&m);
29         for(int i = 0;i < m;i++){
30             int p,h,c;
31             scanf("%d%d%d",&p,&h,&c);
32             vec.push_back(Mi(p,h,c,1.0*p/h));
33         }
34         //sort(vec.begin(),vec.end());//升序排序  
35         //sort(vec.begin(),vec.end(),cmp);//升序排序  
36         //sort(vec.begin(),vec.end(),less<Mi>());//升序排序  
37         sort(vec.begin(),vec.end(),greater<Mi>());//降序排序  
38         int wei = 0;;
39         for(vector<Mi>::iterator it = vec.begin();it!=vec.end();it++){
40             cout <<it->p << " " << it->h << " " << it->c << " " << endl;
41         }
42     return 0;
43 }

程式碼中利用註釋進行了簡單的註解。

另外需要注意的一點是sort中的cmp函式與qsort中的cmp函式區別。

sort cmp 是bool型別的,意味著只有0,1兩個返回值,而qsort中還包括0的情況,所以qsort一般是a-b,而sort一般是a<b的形式

 

相關文章