C++ vector 排序

來源:互聯網
上載者:User

 

               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 部分。

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.