Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
803 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [C/C++] fonction sort() avec STL

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C/C++] fonction sort() avec STL

n°411502
trmassoud
Posté le 30-05-2003 à 14:53:59  profilanswer
 

Salut a ts g un petit probleme avec la fonction sort
 

Code :
  1. class Arc
  2. {
  3. private:
  4.   //Le pointeur sur les sommets
  5.   Sommet * som1 ;
  6.   Sommet * som2 ;
  7.   //Le numero de l'arc
  8.   int info ;
  9.   //La valeur de l'arc
  10.   int valeur ;
  11.   friend class Sommet ;
  12.   friend class Graphe ;
  13. }


 
g surchargé l'operateur  <
 

Code :
  1. bool Arc::operator<(Arc a)
  2. {
  3.   a.valeur << endl ;
  4.   if( valeur < a.valeur )
  5.        return true ;
  6.   else
  7.        return false ;
  8. }


 
et je veux trier cette liste
 

Code :
  1. //Liste temporaire de pointeurs d'arcs
  2. list<Arc *> temparcs ;


 
que j'essaie de trier comme ca :
 

Code :
  1. temparcs.sort() ;


 
et je comprend pas ca ne tri rien du tout !
 
est ce que g mal defini mon operateur ou autres choses ?
 
Help plz


Message édité par trmassoud le 30-05-2003 à 15:39:28
mood
Publicité
Posté le 30-05-2003 à 14:53:59  profilanswer
 

n°411615
verdoux
And I'm still waiting
Posté le 30-05-2003 à 16:55:02  profilanswer
 

Ben ça doit trier les pointeurs :D

n°411663
gloop
Posté le 30-05-2003 à 18:29:35  profilanswer
 

utilise la version de sort() avec un objet fonction pour le critére de comparaison

n°411665
Taz
bisounours-codeur
Posté le 30-05-2003 à 18:33:49  profilanswer
 

gloop a écrit :

utilise la version de sort() avec un objet fonction pour le critére de comparaison
 

ben pourquoi? on fait ça seulement si le critere differe du sémantiquement le plus correcte

n°411689
trmassoud
Posté le 30-05-2003 à 19:17:27  profilanswer
 

desole mais je ne comprend pas tout ce que vous me dites  :cry:  
 
si g bien compris verdoux ?
 
ma liste contient des pointeurs vers des arcs et donc si je surcharge mon operateur < entre des arcs ca ne sert a rien ?
 
il faudrait que je creer un fonction qui compare des pointeurs d'arcs ? et que je la passe en argument de sort ?  
 

Code :
  1. bool Arc::comparePointeurArcs(Arc *a)
  2. {
  3. if (this->valeur<a->valeur)
  4.     return true ;
  5. else return false ;
  6. }


 
mais ca, ca va pas passer parce que ce qui est represente par "this" n'est pas un pointeur vers un arc ?
 
comment je fais alors ?
 
dsl gloop et taz mais je comprend pas ce que vous me dites -> cause MOI en C++ =  [:madyodaseb]  
 
si vous pouviez m'eclaircir ?

n°411720
Taz
bisounours-codeur
Posté le 30-05-2003 à 20:12:34  profilanswer
 

1) t'es sur d'aoir besoin de pointeur?
2) si oui, tu surcharges
bool operator<(consr Arc *a, const Arc *b)
{ return *a<*b;}


Message édité par Taz le 30-05-2003 à 20:44:43
n°411725
trmassoud
Posté le 30-05-2003 à 20:21:08  profilanswer
 

++Taz a écrit :

1) t'es sur d'aoir besoin de pointeur?
2) si oui, tu surcharges
bool operator<(consr Arc *a, const Arc *b)
{ return *a<*b;}


 
merci ++Taz
 
1) oui je suis obliger car dans ma structure de donnees les arcs sont deja stocker qqpart et il faut que jevite la duplication d'information ;)
2) je vais essayer !
 et merci je ne connaisais pas ca : si g bien compris ca va comparer pointeur_vers_arcs1 < pointeur_vers_arcs1  ?


---------------
Allez doucement n'empèche pas d'arriver !
n°411730
trmassoud
Posté le 30-05-2003 à 20:29:32  profilanswer
 

Arf le compilo il me dit que la surcharge de l'operateur doit prendre exclusivement un seul argument :(
 
 :heink:

n°411740
Taz
bisounours-codeur
Posté le 30-05-2003 à 20:44:14  profilanswer
 

putain, j'ai encore dit n'importe quoi moi je suis trop fatigué [:the grosminet]
 
désolé. voici un exemple fonctionnel et complet
 

Code :
  1. #include <list>
  2. struct Foo
  3. {
  4.   int i;
  5. };
  6. bool operator<(const Foo &a, const Foo &b)
  7. {
  8.   return a.i < b.i;
  9. }
  10. class LessFooPtr
  11. {
  12. public:
  13.   bool operator()(const Foo *a, const Foo *b) const
  14.   {
  15.     return *a < *b;
  16.   }
  17. };
  18. int main()
  19. {
  20.   Foo a, b;
  21.   a < b;
  22.   std::list<Foo *> l;
  23.   // t'y mets ce que tu veux ..
  24.   // et la tu passes un objet fonction qui sera chargé de faire la comparaison
  25.   // que de souplesse
  26.   l.sort(LessFooPtr());
  27. }


Message édité par Taz le 30-05-2003 à 20:46:32
n°411745
Taz
bisounours-codeur
Posté le 30-05-2003 à 20:50:11  profilanswer
 

et on peut encore améliorer avec une meilleure définition du comparateur
 

Code :
  1. #include <functional>
  2. class LessFooPtr : public std::binary_function< const Foo *, const Foo *, bool >
  3. {
  4. public:
  5.   bool operator()(const Foo *a, const Foo *b) const
  6.   {
  7.     return *a < *b;
  8.   }
  9. };


mood
Publicité
Posté le 30-05-2003 à 20:50:11  profilanswer
 

n°411747
trmassoud
Posté le 30-05-2003 à 20:52:07  profilanswer
 


 
ca marche pas ca :(
 
en fait faudrait que je fasse savoir a la fonction sort() que pour comparer les elements de ma liste (qui est une liste dde pointeurs vers des arcs) elle compare la variable valeur des arcs qui sont pointés.
 
mais ca pour le faire :((
 


---------------
Allez doucement n'empèche pas d'arriver !
n°411756
Taz
bisounours-codeur
Posté le 30-05-2003 à 21:23:33  profilanswer
 

Code :
  1. #include <list>
  2. #include <functional>
  3. struct Foo
  4. {
  5.   int i;
  6. };
  7. bool operator<(const Foo &a, const Foo &b)
  8. {
  9.   return a.i < b.i;
  10. }
  11. class LessFooPtr : public std::binary_function< const Foo *, const Foo *, bool >
  12. {
  13. public:
  14.   bool operator()(const Foo *a, const Foo *b) const
  15.   {
  16.     return *a < *b;
  17.   }
  18. };
  19. template<class T>
  20. class LessPtr : public std::binary_function< const T *, const T *, bool >
  21. {
  22. public:
  23.   bool operator()(const T *a, const T *b) const
  24.   {
  25.     return *a < *b;
  26.   }
  27. };
  28. template<class T>
  29. bool LessPtrFx(const T *a, const T *b)
  30. {
  31.   return *a < *b;
  32. }
  33. int main()
  34. {
  35.   Foo a, b;
  36.  
  37.   a < b;
  38.   std::list<Foo *> l;
  39.   l.sort(LessFooPtr());
  40.   l.sort(LessPtr<Foo>());
  41.   l.sort(std::ptr_fun(&LessPtrFx<Foo> ));
  42. }


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [C/C++] fonction sort() avec STL

 

Sujets relatifs
[JS]Pb sur fonction[js] problème avec une fonction simple
[PHP] Fonction qui retourne les dates de tous les samedis de l'annéescipt php, inserer un lien en fonction de la table
Fonction appelantepitis problemes avec la fonction copy
fonction "execute"Comment faire en sorte de tester la fonction mail lorsqu'on utilise EA
exemple de fonction roundup pour VBA[JS] fonction replace()
Plus de sujets relatifs à : [C/C++] fonction sort() avec STL


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR