vector 排序


C++中当 vector 中的数据类型为基本类型时我们调用std::sort函数很容易实现 vector中数据成员的升序和降序排序,然而当vector中的数据类型为自定义结构体类型时,我们该怎样实现升序与降序排列呢?有两种方法,下面的例子能很好的说明:   方法1:
   我们直接来看代码吧,比较简单,容易理解:
   #include "stdafx.h"
   #include     
   #include  
   #include
  
   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   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())   ;   //或者sort(ctn.begin(), ctn.end())   默认情况为升序
  
   for   ( int   i=0;   i<3;   i++   )  
     printf("%d\n",ctn.m_uiType);  

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

   for   ( int   i=0;   i<3;   i++   )  
     printf("%d\n",ctn.m_uiType);  
  
  
   return   0   ;  
   }
以上方法就可以实现升序排序,输出结果为 1   2   3  
降序排序结果3   2   1。
方法2 :   不修改结构体或类的定义部分,我们用函数对象来实现:
   #include "stdafx.h"
   #include     
   #include  
   #include
  
   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   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.m_uiType);  
  
   sort(ctn.begin(), ctn.end(),greatermark)   ;   //降序排序

  
   return   0   ;  
   }

以上方法就可以实现升序排序,输出结果为 1   2   3  
降序排序结果3   2   1。
方法2是一种比较简单的方法。


转载自http://blog.renren.com/blog/261066996/496243884

你可能感兴趣的:(vector 排序)