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  ;   
      }

  • 相关阅读:
    @RequestParam注解使用:Name for argument type [java.lang.String] not available, and parameter name information not found in class file either.
    cglib动态代理导致注解丢失问题及如何修改注解允许被继承
    springboot Autowired BeanNotOfRequiredTypeException
    git根据用户过滤提交记录
    不同包下,相同数据结构的两个类进行转换
    How to use Jackson to deserialise an array of objects
    jooq实践
    java如何寻找main函数对应的类
    Python--matplotlib
    Python 和 Scikit-Learn
  • 原文地址:https://www.cnblogs.com/yuyixingkong/p/3933454.html
Copyright © 2011-2022 走看看