在C++中,對結構體的排序方式比C語言豐富的多。在C語言中,咱們主要是經過qsort進行排序操做(拋開手寫排序算法不說)。ios
在C++<algorithm>中,有一個十分強大的排序函數sort,他的內部綜合了許多種排序算法,所以很是高效。而且,用它來對結構體排序也十分方便。算法
先貼一段示例代碼:less
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函數區別。spa
sort cmp 是bool類型的,意味着只有0,1兩個返回值,而qsort中還包括0的狀況,因此qsort通常是a-b,而sort通常是a<b的形式code