zoukankan      html  css  js  c++  java
  • C++ vector 排序

    C++ vector 排序  

    C++中当 vector 中的数据类型为基本类型时我们调用std::sort函数很容易实现 vector中数据成员的升序和降序排序,然而当vector中的数据类型为自定义结构体类型时,我们该怎样实现升序与降序排列呢?有两种方法,下面的例子能很好的说明:  方法1:
      我们直接来看代码吧,比较简单,容易理解:
       #include "stdafx.h"
       #include   <vector>   
       #include   <algorithm> 
       #include <functional> 
        
      using   namespace   std;   
      struct AssessTypeInfo

        unsigned int m_uiType;   //类型ID
        char   m_szName[64];  //类型名称
        unsigned int m_uiTotal;   //总分数

       bool   operator <  (const   AssessTypeInfo&   rhs   )  const   //升序排序时必须写的函数
      {   
         return   m_uiType   <   rhs.m_uiType; 
       }
        bool   operator >  (const   AssessTypeInfo&   rhs   )  const   //降序排序时必须写的函数
       {   
           return   m_uiType   >   rhs.m_uiType; 
        }
    }
    int   main()   
      {   
       vector<AssessTypeInfo >   ctn   ;   
       
       AssessTypeInfo a1;
       a1.m_uiType=1;
       AssessTypeInfo  a2;
       a2.m_uiType=2;

       AssessTypeInfo  a3;
       a3.m_uiType=3;

       ctn.push_back(a1);
       ctn.push_back(a2);
       ctn.push_back(a3);
       //升序排序
       sort(ctn.begin(), ctn.end(),less<AssessTypeInfo>())   ;   //或者sort(ctn.begin(), ctn.end())  默认情况为升序
       
       for   ( int  i=0;   i<3;   i++   )   
        printf("%d ",ctn[i].m_uiType);   

      //降序排序
      sort(ctn.begin(), ctn.end(),greater<AssessTypeInfo>())   ;   

       for   ( int  i=0;   i<3;   i++   )   
        printf("%d ",ctn[i].m_uiType);   
       
       
       return   0  ;   
      }
    以上方法就可以实现升序排序,输出结果为 1  2   3  
    降序排序结果3  2  1。
    方法2 :  不修改结构体或类的定义部分,我们用函数对象来实现:
      #include "stdafx.h"
      #include   <vector>   
      #include   <algorithm> 
      #include <functional> 
        
      using   namespace   std;   
    struct AssessTypeInfo
    {
    unsigned int m_uiType;   //类型ID
      char   m_szName[64];  //类型名称
    unsigned int m_uiTotal;   //总分数
    };

      bool   lessmark(const   AssessTypeInfo&   s1,const   AssessTypeInfo&   s2)   
      {   
          return   s1.m_uiType   <   s2.m_uiType;   
      } 
      bool   greatermark(const   AssessTypeInfo&   s1,const   AssessTypeInfo&   s2)   
      {   
          return   s1.m_uiType   >   s2.m_uiType;   
      } 
    int   main()   
      {   
       vector<AssessTypeInfo >   ctn   ;   
       
       AssessTypeInfo a1;
       a1.m_uiType=1;
       AssessTypeInfo  a2;
       a2.m_uiType=2;

       AssessTypeInfo  a3;
       a3.m_uiType=3;

       ctn.push_back(a1);
       ctn.push_back(a2);
       ctn.push_back(a3);

       sort(ctn.begin(), ctn.end(),lessmark)   ;   //升序排序
       
       
       for   ( int  i=0;   i<3;   i++   )   
        printf("%d ",ctn[i].m_uiType);   
       
       sort(ctn.begin(), ctn.end(),greatermark)   ;   //降序排序

       
       return   0  ;   
      }

  • 相关阅读:
    CF1042E Vasya and Magic Matrix
    Luogu 4868 Preprefix sum
    CF1042F Leaf Sets
    CF1041F Ray in the tube
    【Luogu】P1410子序列(DP)
    【Luogu】P1383高级打字机
    【Luogu】P1681最大正方形2(异或运算,DP)
    【Luogu】P1122最大子树和(DFS,树上DP)
    【Luogu】P2258子矩阵(状态压缩,DP)
    【Luogu】P2158仪仗队(欧拉函数)
  • 原文地址:https://www.cnblogs.com/yuyixingkong/p/3933454.html
Copyright © 2011-2022 走看看