標籤:

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& xs;
MemberSort&(begin(xs), end(xs), student::math);


struct student
{
double math;
double english;
double chinese;
};

vector& v;

sort( begin(v), end(v),
[](const student a, const student b) { return a. math &< b.math; } );


考試分數用 double 類型,好像有些不對,哈哈


sort函數的第三個參數是可選的,可以填你自定義的比較函數,返回bool類型。這個比較函數會當成小於號用。

這樣就可以寫三個比較函數分別比較類中不同的值。如果從小到大就用小於號,從大到小就用大於號。

至於怎麼設計,怎麼選擇排哪個,判斷一下調不同的函數就好了。

好了,道理都講清楚了,加油 :P


寫個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& vecCache;
//////
sort(vecCache.begin(), vecCache.end(), MyCompare(0));
sort(vecCache.begin(), vecCache.end(), MyCompare(1));
sort(vecCache.begin(), vecCache.end(), MyCompare(2));

應該類似這種吧, 不過student類應該封裝下取這個科目的函數 或者 public出來.


首先公開數據,sort(vec.begin(),vec.end(),[](student l,student r){return l.xx&>r.xx});xx是你要排的數據


推薦閱讀:

在C#中,如何實現跟native dll 中途的線程間通信?
學C#需要學好C++么?
c++中子函數的局部變數在函數結束後是否會銷毀變數的內容?
c++中在局部空間用new運算符創建的變數是否會被銷毀?
c++怎麼檢測內存泄露,怎麼定位內存泄露?

TAG:程序員 | C |