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