最近做的東西,要將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 部分。 |