List et class - tri sur les pointeur

Signaler
Messages postés
5
Date d'inscription
mercredi 2 mai 2007
Statut
Membre
Dernière intervention
7 janvier 2008
-
Messages postés
5
Date d'inscription
mercredi 2 mai 2007
Statut
Membre
Dernière intervention
7 janvier 2008
-
Bonsoir,
j'ai un problème avec une list.
J'ai définit une class fiche. J'ai une list de pointeur vers des fiches.
Je voudrais trier cette list. Avec sort, ça semble facile, à condition d'avoir un ordre sur le type de données de la list. Or j'ai surchargé l'operator< sur les fiches, pour avoir un ordre.
Est-ce possible de faire de même sur des pointeurs (qui seront dans l'ordre des fiches vers lesquels ils pointent)?

J'ai testé

bool liste*::operator<(const fiche* fic){
if(**this<*fic){return true;}
else{return false;}
}

Mais comme je le pensais, il considère que c'est une méthode de la class fiche. Comment lui dire que c'est la définition d'un ordre sur les pointeurs?

Ou si qqn a une autre idée, elle sera la bienvenue.
Merci d'avance

DroledeBx

2 réponses

Messages postés
280
Date d'inscription
dimanche 7 septembre 2003
Statut
Membre
Dernière intervention
8 juillet 2014
4
salut

il faut faire une fonction séparée de ta classe je pense, ou friend si tu tries en fonction de champs privés

voila un exemple:

#include
#include <list>
#include <string>


using namespace std;


bool compare (string *first, string *second)
{
  return *first < *second;
}


int main ()
{
  list<string*> mylist;
  list<string*>::iterator it;  string un "un", deux "deux", trois = "trois";
  mylist.push_back (&un);
  mylist.push_back (&deux);
  mylist.push_back (&trois);




  cout << "mylist contains:";
  for (it=mylist.begin(); it!=mylist.end(); ++it)
    cout << " " << **it;
  cout << endl;


  mylist.sort(compare);


  cout << "mylist contains:";
  for (it=mylist.begin(); it!=mylist.end(); ++it)
    cout << " " << **it;
  cout << endl;


  return 0;
}
Messages postés
5
Date d'inscription
mercredi 2 mai 2007
Statut
Membre
Dernière intervention
7 janvier 2008

Effectivement, ça marche beaucoup mieux, en induisant un ordre sur les pointeurs. J'ai donc fait :

bool compare(fiche* A, fiche* B){return (*A)<(*B);}

J'avais surchargé l'opérateur < dans la classe fiche.
J'ai aussi une classe Repertoire qui contient une liste de pointeurs vers des fiches. Et une fonction Trier:

bool Repertoire::Trier(){L.sort(compare);}

Donc tout marche parfaitement.
Merci.

DroledeBx