C++ vector 排序

C++ vector 排序 

2009-10-12 10:23:04|  分类: 技术要领 |  标签: |字号 订阅

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\n",ctn[i].m_uiType);  

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

   for   ( int  i=0;   i<3;   i++   )  
    printf("%d\n",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\n",ctn[i].m_uiType);  
  
   sort(ctn.begin(), ctn.end(),greatermark)   ;   //降序排序

  
   return   0  ;  
  }

以上方法就可以实现升序排序,输出结果为 1  2   3 
降序排序结果3  2  1。
方法2是一种比较简单的方法。
以上两种方法您可根据您自己的需求选择,并且以上两种方法在VC++6.0环境下 编译通过,也是自己在实践过程中的总结,如有不妥的地方,欢迎您指出,至于为什么这样使用,请参考 stl算法中sort 部分。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值