c++ ,如何按照不同的要求調用標準庫sort函數排序?
有一個學生類,數據成員由各科成績組成。
class student{private:
double math; double english; double chinese;};
想利用vector儲存學生對象,並利用標準庫的sort函數對學生對象進行排序。怎麼樣設計,能夠在需要按語文/數學/英語成績排序時候實現相應的功能呢?
順便給你寫了個庫函數
template&
void MemberSort(I beginIt, I endIt, U T::* member)
{
std::sort(beginIt, endIt, [=](const T a, const T b)
{
return a.*member &< b.*member;
});
}
usage:
vector&
MemberSort&
struct student
{
double math;
double english;
double chinese;
};
vector&
sort( begin(v), end(v),
[](const student a, const student b) { return a. math &< b.math; }
);
考試分數用 double 類型,好像有些不對,哈哈
sort函數的第三個參數是可選的,可以填你自定義的比較函數,返回bool類型。這個比較函數會當成小於號用。
這樣就可以寫三個比較函數分別比較類中不同的值。如果從小到大就用小於號,從大到小就用大於號。
至於怎麼設計,怎麼選擇排哪個,判斷一下調不同的函數就好了。
好了,道理都講清楚了,加油寫個cmp函數唄
重載&<號,然後包含algorithm,用sort
class MyCompare
{
public:
MyCompare(int val=0):type(val){}
bool operator()(class student left, class student right)
{
if(0 == type) return (left.math &< right.math);
if(1 == type) return (left.english &< right.english);
//////
}
private:
int type;
}
vector&
//////
sort(vecCache.begin(), vecCache.end(), MyCompare(0));
sort(vecCache.begin(), vecCache.end(), MyCompare(1));
sort(vecCache.begin(), vecCache.end(), MyCompare(2));
首先公開數據,sort(vec.begin(),vec.end(),[](student l,student r){return l.xx&>r.xx});xx是你要排的數據
推薦閱讀:
※在C#中,如何實現跟native dll 中途的線程間通信?
※學C#需要學好C++么?
※c++中子函數的局部變數在函數結束後是否會銷毀變數的內容?
※c++中在局部空間用new運算符創建的變數是否會被銷毀?
※c++怎麼檢測內存泄露,怎麼定位內存泄露?