Trier une liste contenant une paire ?
Bonjour à tous,
Je pensais réussir ce que j'entreprends mais je me heurte à un problème.... Je veux simplement trier une liste qui contient une paire de (wxString, char). Pour l'exemple, considérons le type wxString comme un std::string, ca changera rien.
Voici ma déclaration:
Code:
1 2 3 4
|
// List to keep words for sorting them
typedef std::pair< wxString, char > typ_pair_list ;
std::list< typ_pair_list > m_o_right_word_list ; |
Ensuite, je pensais tout simplement utiliser la fonction sort() de la liste en lui passant un prédicat binaire. Je déclare donc, toujours dans ma classe:
Code:
1 2 3 4 5 6
|
// Binary predicat to sort a list according to the points
struct Sort_List_By_Points : std::binary_function< const typ_pair_list&, const typ_pair_list&, bool >
{
bool operator() ( const typ_pair_list& par_o_element1, const typ_pair_list& par_o_element2 ) const ;
}; |
OK, et maintenant, à l'utilisation, voici comme je fais mon tri:
Code:
1 2
|
m_o_right_word_list.sort( Sort_List_By_Points() ); |
Et voici la definition de mon opérateur() :
Code:
1 2 3 4 5 6
|
bool
CDisplayStats::Sort_List_By_Points::operator()( const typ_pair_list& par_o_element1, const typ_pair_list& par_o_element2 ) const
{
return par_o_element1.second < par_o_element2.second ;
} |
Le résultat attendu est que ca me trie ma liste selon l'élément second, cet a dire le nombre de points. Mais ce que j'ai en définitive à l'execution c'est que ca ne fait rien du tout, pas d'erreur, mais la liste reste identique. Voici un exemple de liste:
Citation:
Manger, 2
Boire, 1
Tarte, 0
Cousin, 6
Et après execution je veux:
Citation:
Tarte, 0
Boire, 1
Manger, 2
Cousin, 6
Merci pour votre aide.