zoukankan      html  css  js  c++  java
  • C++结构体排序

    在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的形式

  • 相关阅读:
    P3822 [NOI2017]整数
    P4630 [APIO2018] Duathlon 铁人两项
    P3230 [HNOI2013]比赛
    P2570 [ZJOI2010]贪吃的老鼠
    P4576 [CQOI2013]棋盘游戏
    P3256 [JLOI2013]赛车
    P3297 [SDOI2013]逃考
    CF487E Tourists
    设置一个双色球脚本(2)并带颜色输出
    设置一个双色球脚本
  • 原文地址:https://www.cnblogs.com/Wade-/p/6372205.html
Copyright © 2011-2022 走看看