2014-06-15 4 views
1

Je sais qu'il y a déjà des questions à ce sujet, et j'ai suivi tous les conseils, mais cela ne fonctionne toujours pas, donc je serai heureux de comprendre ce qui ne va pas.trier un vecteur de structures en utilisant <algorithm>

Je possède ce struct:

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

et je veux trier le vecteur par le _SCORE - de haut en bas. Voici ce que j'écrit:

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

J'ai cette fonction:

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

J'ai inclus algorithme, donc je ne sais vraiment pas quel est le problème. Je reçois ces erreurs:

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

Merci

+3

myFunction est-il une fonction membre? Ensuite, il devrait être statique. – 4pie0

+1

'myFunction' doit être' static' s'il s'agit d'une fonction membre. –

+0

Cette erreur est un non-sens >> * 'void std :: sort (_RanIt, _RanIt)': ** attend 2 arguments - 3 fournis ***. – Nawaz

Répondre

0

Il ressemble à maFonction dans votre exemple est fonction de la classe de membre. Il doit être statique pour être un bon prédicat de l'algorithme std::sort. Vous pouvez également faire de cette fonction une fonction exceptionnelle gratuite.

Ou vous pouvez faire un foncteur

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

et passer une instance de ce à l'algorithme:

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

Outre réponse @bits_international vous pouvez aussi le faire comme ça dans 11 C++

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

J'espère que cela a aidé.

Questions connexes