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:
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 ;
OK, et maintenant, à l'utilisation, voici comme je fais mon tri:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 ; };
Et voici la definition de mon opérateur() :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 m_o_right_word_list.sort( Sort_List_By_Points() );
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:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 ; }
Et après execution je veux:Manger, 2
Boire, 1
Tarte, 0
Cousin, 6
Merci pour votre aide.Tarte, 0
Boire, 1
Manger, 2
Cousin, 6
Partager