C 中,自定義結構體vector的排序

2021-05-23 06:01:03 字數 2961 閱讀 6968

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()  

vectorctn   ;  

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[i].m_uitype);  

//降序排序

sort(ctn.begin(), ctn.end(),greater())   ;  

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  

#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   assesstypein

fo&   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()            

vectorctn   ;  

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

return 0 ; } 以上方法就可以實現公升序排序,輸出結果為 1 2 3 降序排序結果3 2 1。方法2是一種比較簡單的方法。 以上兩種方法您可根據您自己的需求選擇,並且以上兩種方法在vc++6.0環境下編譯通過,也是自己在實踐過程中的總結,如有不妥的地方,歡迎您指出,至於為什麼這樣使用,請參考 stl演算法中sort 部分。

詳細出處參考:http://www.itqun.net/content-detail/118345_3.html

C 結構體自定義排序

宣告 本機無c 環境,以下 均沒有編譯測試,最近golang寫的比較多,語法可能會有問題,請自行測試 sort排序函式簡單使用 include using namespace std int a 100 bool cmp1 int x,int y bool cmp2 int x,int y int ...

自定義結構體封裝

使用nsvalue如下方法進行裝箱 nsvalue valuewithbytes const void value objctype const char type 呼叫下面的方法進行拆箱 void getvalue void value main.m foundationframework cre...

自定義型別 結構體

struct tag 結構體型別名稱 variable list 結構體變數 省略結構體型別名稱 匿名結構體型別 當省略掉結構體型別名稱時,就不能省略掉結構體變數,這樣是不合理的,所以一般我們不建議省略結構體型別名 struct x,y 全域性變數 struct a 20 p int main 注意...