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

  FORUM HardWare.fr
  Programmation
  C++

  liste d'objet et sort

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

liste d'objet et sort

n°953055
didier1809
${citation_perso}
Posté le 14-01-2005 à 12:49:25  profilanswer
 

Bonjour  :hello:  
 
j'ai une liste de personne
 

Code :
  1. class personne
  2. {
  3.   public :
  4.     string nom, prenom;
  5. ...
  6. }


 
et j'aimerai pouvoir faire un sort dessus, et bien evidemment, ca ne marche pas   :o  
 
autre probleme, qui doit etre le meme, j'ai du mal à faire que le find_if fonctionne, j'ai reussi a le faire fonctionner, en faisant une classe avec un bool operator () qui teste si le nom est egual a un string, mais je dois mettre le string en 'dur' dans le code  :sweat:  
 
 
je sais pas si c'est super clair ...
 
 
 
thx  :jap:


---------------
.
mood
Publicité
Posté le 14-01-2005 à 12:49:25  profilanswer
 

n°953076
Taz
bisounours-codeur
Posté le 14-01-2005 à 13:45:36  profilanswer
 

définis
 
bool operator<(const Personne &a, const Personne &b);

n°953100
didier1809
${citation_perso}
Posté le 14-01-2005 à 14:03:28  profilanswer
 

Taz a écrit :

définis
 
bool operator<(const Personne &a, const Personne &b);


 
 
j'avais vu, ici ou sur un site, cette solution, mais il m'indique :
 
'binary operator <' has too many parameters
 


---------------
.
n°953108
Taz
bisounours-codeur
Posté le 14-01-2005 à 14:10:48  profilanswer
 

qui t'as dit de le mettre en fonction membre ?

n°953110
SomeBugsIn​Me
life suxx
Posté le 14-01-2005 à 14:13:32  profilanswer
 

Code :
  1. friend bool operator<(const personne &a, const personne &b);


 
edit: grillé :)


Message édité par SomeBugsInMe le 14-01-2005 à 14:14:13
n°953111
didier1809
${citation_perso}
Posté le 14-01-2005 à 14:13:37  profilanswer
 

Taz a écrit :

qui t'as dit de le mettre en fonction membre ?


 
[:ddr555]
 
merci  :D  
 
je sais pas pourquoi je m'obstinais à le mettre en methode  :sweat:  
 
enfin, ca marche, merci à toi  :hello:


---------------
.
n°953118
Taz
bisounours-codeur
Posté le 14-01-2005 à 14:28:27  profilanswer
 

SomeBugsInMe a écrit :

Code :
  1. friend bool operator<(const personne &a, const personne &b);


 
edit: grillé :)


tu veux mon pied dans la gueule ? d'ou tu as besoin d'un friend :o
friend c'est mal.

n°953130
schnapsman​n
Zaford Beeblefect
Posté le 14-01-2005 à 14:42:25  profilanswer
 

Taz a écrit :

tu veux mon pied dans la gueule ? d'ou tu as besoin d'un friend :o
friend c'est mal.


et toi tu veux mon poing dans la gueule?

Code :
  1. class Foo
  2. {
  3.  int foo;
  4. public:
  5.  Foo(int _foo) : foo(_foo) {}
  6.  friend bool operator<(const Foo &a, const Foo &b);
  7. };
  8. bool operator<(const Foo &a, const Foo &b)
  9. {
  10. return a.foo<b.foo;
  11. }



---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
n°953220
SomeBugsIn​Me
life suxx
Posté le 14-01-2005 à 16:44:56  profilanswer
 

j'ai peut-être pas été clair.
 
Je voulais dire comme schnapsmann.

n°953397
Taz
bisounours-codeur
Posté le 14-01-2005 à 22:34:30  profilanswer
 

friend c'est mal :o. La comparaison n'est pas une opération interne en plus :o

mood
Publicité
Posté le 14-01-2005 à 22:34:30  profilanswer
 

n°953400
didier1809
${citation_perso}
Posté le 14-01-2005 à 22:38:13  profilanswer
 

Taz a écrit :

friend c'est mal :o. La comparaison n'est pas une opération interne en plus :o


 
meme par 'soucis de clarté', cue que on redefini l'operateur '<' pour la classe personne, ca me semblait logique de le mettre dans la classe, mais en friend.


---------------
.
n°953465
Taz
bisounours-codeur
Posté le 15-01-2005 à 00:31:30  profilanswer
 

ça n'a rien de clair. Tu est même obligé de foutre en l'air ton encapsulation avec un friend ... c'est clair ...

n°953476
Taz
bisounours-codeur
Posté le 15-01-2005 à 01:04:55  profilanswer
 

Code :
  1. #include <string>
  2. using std::string;
  3. class Personne
  4. {
  5.   bool less(const Personne &other) const;
  6. private:
  7.   string nom, prenom;
  8. }
  9. bool Personne::less(const Personne &other) const
  10. {
  11.   // ...
  12.   return true;
  13. }
  14. inline bool operator<(const Personne &left, const Personne &right)
  15. {
  16.   return left.less(right);
  17. }


Message édité par Taz le 15-01-2005 à 10:33:37
n°953488
push
/dev/random
Posté le 15-01-2005 à 02:29:19  profilanswer
 

pq c'est pas bien en tant que fonction membre ?

n°953515
didier1809
${citation_perso}
Posté le 15-01-2005 à 10:21:44  profilanswer
 

Taz a écrit :

ça n'a rien de clair. Tu est même obligé de foutre en l'air ton encapsulation avec un friend ... c'est clair ...


 
il me semblais, mea culpa comme on dis alors ;)


---------------
.
n°953516
Kristoph
Posté le 15-01-2005 à 10:25:45  profilanswer
 

push a écrit :

pq c'est pas bien en tant que fonction membre ?


La surcharge des operateurs ne passe pas bien en fonction membre généralement à cause des convertions implicites qui ne marchent plus alors sur le membre de gauche.

n°954650
nathan_g
Posté le 17-01-2005 à 15:39:01  profilanswer
 

Comme j'avais des problèmes de tri similaires avec STL, j'ai suivi avec intérêt ce post. Cependant, pourquoi peut-il être intéressant d'utiliser le inline dans l'expression :
 
inline bool operator<(const Personne &left, const Personne &right)  
 
comme Taz l'a écrit précédemment.
 
Est-ce que cela pose un problème si on ne l'utilise pas ? Dans le cas que j'ai programmé pour mon travail, l'absence de inline ne pose pas de problème.

n°954873
Taz
bisounours-codeur
Posté le 17-01-2005 à 17:29:32  profilanswer
 

...

n°954952
nathan_g
Posté le 17-01-2005 à 19:17:38  profilanswer
 

Bon, c'est concis !
 
En fait, comme je l'ai dit, je suis intéressé par réaliser des tris dans des list avec STL et sort(). Le problème que je rencontre est que je n'ai pas des listes d'objet mais de pointeur sur des objets. Ainsi, quand je veux définir l'opérateur < pour deux pointeurs Article* , j'écrit :
 
bool operator<(Article* &left,Article* &right)
{
  return (left->prix()<right->prix());
}
 
Malheureusment, à la compil, j'ai une erreur :
 
e:\monchemin\Article.cpp(6) : error C2803: 'operator <' must have at least one formal parameter of class type
 
Est ce que cela veut dire que je suis obligé de passer par les foncteurs (car il doit être possible de trier des éléments par un objet foncteur, je crois) ?
Y a-t'il plus simple que l'utilisation de ce foncteur ?

n°955003
Taz
bisounours-codeur
Posté le 17-01-2005 à 20:22:07  profilanswer
 

1) pas de surcharge pour les pointeurs
2) ça manque de const
3) tu peux inliner
4) défini un objet-fonction (ou une fonction) que tu passe en paramètre à std::sort

n°955067
blackgodde​ss
vive le troll !
Posté le 17-01-2005 à 22:10:06  profilanswer
 

Taz a écrit :

Code :
  1. #include <string>
  2. using std::string;
  3. class Personne
  4. {
  5.   bool less(const Personne &other) const;
  6. private:
  7.   string nom, prenom;
  8. }
  9. bool Personne::less(const Personne &other) const
  10. {
  11.   // ...
  12.   return true;
  13. }
  14. inline bool operator<(const Personne &left, const Personne &right)
  15. {
  16.   return left.less(right);
  17. }



 
 
manque pas un ptit public: (ou struct) et un ; a la fin de la déclaration de classe ?


---------------
-( BlackGoddess )-
n°955073
Taz
bisounours-codeur
Posté le 17-01-2005 à 22:23:53  profilanswer
 

oui

n°955231
nathan_g
Posté le 18-01-2005 à 08:15:29  profilanswer
 

Ok, merci Taz de ces indications.
Quand tu donnes ton conseil 4, c'est justement la définition d'un foncteur, non ? En fait, ce foncteur est l'argument à passer en paramètre qui va servir au tri ?

mood
Publicité
Posté le   profilanswer
 


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

  liste d'objet et sort

 

Sujets relatifs
Vb excel : Afficher une liste deroulante ....debutant insideDTD liste d'attribut déterminé ou pas
liste chainée et traitemenbts de fichierDésactiver la procédure click d'un objet
Aligner le texte verticalement dans une liste[VB.NET] Datagrid, DataGridTableStyle et objet collection
Pbs structure en liste chainée et manip de fichierrécupérer donné d'une liste déroulante
enregister un objet dans un fichierappartenance à une liste?
Plus de sujets relatifs à : liste d'objet et sort


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