2014-06-15 34 views
1

我知道已經有關於它的問題,並且我遵循了所有的提示,但它仍然不起作用,所以我會很高興明白什麼是錯的。使用<algorithm>排序結構向量<algorithm>

我有這樣的結構:

struct Scores 
{ 
    int _score; 
    std::string _name; 
}; 

,我想在矢量由_score排序 - 從高到低。這是我寫的:

std::sort (_scores.begin(), _scores.end(), myFunction); 

我有這樣的功能:

bool myFunction (const struct Scores &i, const struct Scores &j) 
    {return i._score>j._score;} 

我已經包含算法,所以我真的不知道是什麼問題。我得到這些錯誤:

error C3867: 'HighScores::myFunction': function call missing argument list; 
error C2780: 'void std::sort(_RanIt,_RanIt)' : expects 2 arguments - 3 provided 

謝謝

+3

是myFunction的成員函數嗎?那麼它應該是靜態的。 – 4pie0

+1

如果myFunction是一個成員函數,那麼它需要是'static'。 –

+0

這個錯誤是無稽之談>> *'無效std :: sort(_RanIt,_RanIt)':**期望2個參數 - 3提供***。 – Nawaz

回答

0

它看起來像你的榜樣myFunction是成員類的功能。它必須是靜態的,然後才能成爲std::sort算法的正確謂詞。或者,你可以使這個功能是一個免費的優秀功能。

或者你可以做一個仿函數

struct Sorter { 
    bool operator()(const Scores &o1, const Scores &o2) { 
     return o1._score > o2._score; 
    } 
}; 

,並傳遞了這樣的一個實例的算法:

std::sort (_scores.begin(), _scores.end(), Sorter()); 
0

除了@bits_international答案你也可以不喜歡它,在C++ 11

std::sort(_scores.begin(), _scores.end(), [](const Score& a, const Score& b) { 
    return a._score > b._score; 
}); 

我希望它有幫助。