List et class - tri sur les pointeur

Utilisateur anonyme - 3 janv. 2008 à 19:13
 Utilisateur anonyme - 7 janv. 2008 à 19:23
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

acx01b Messages postés 280 Date d'inscription dimanche 7 septembre 2003 Statut Membre Dernière intervention 8 juillet 2014 6
3 janv. 2008 à 19:42
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;
}
0
Utilisateur anonyme
7 janv. 2008 à 19:23
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
0
Rejoignez-nous