c++中vector排序的問題二

來源:互聯網
上載者:User
C++ vector 排序2009-12-21 17:17

最近做的東西,要將vector 中的內容輸出,結果發現有些檔案被交替反覆開啟,所以就想吧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\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.