最近做的東西,要將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; //類型IDchar 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 部分。
為了愛護眼網