liste d'objet et sort - C++ - Programmation
Marsh Posté le 14-01-2005 à 13:45:36
définis
bool operator<(const Personne &a, const Personne &b);
Marsh Posté le 14-01-2005 à 14:03:28
Taz a écrit : définis |
j'avais vu, ici ou sur un site, cette solution, mais il m'indique :
'binary operator <' has too many parameters
Marsh Posté le 14-01-2005 à 14:13:32
Code :
|
edit: grillé
Marsh Posté le 14-01-2005 à 14:13:37
Taz a écrit : qui t'as dit de le mettre en fonction membre ? |
merci
je sais pas pourquoi je m'obstinais à le mettre en methode
enfin, ca marche, merci à toi
Marsh Posté le 14-01-2005 à 14:28:27
SomeBugsInMe a écrit :
|
tu veux mon pied dans la gueule ? d'ou tu as besoin d'un friend
friend c'est mal.
Marsh Posté le 14-01-2005 à 14:42:25
Taz a écrit : tu veux mon pied dans la gueule ? d'ou tu as besoin d'un friend |
et toi tu veux mon poing dans la gueule?
Code :
|
Marsh Posté le 14-01-2005 à 16:44:56
j'ai peut-être pas été clair.
Je voulais dire comme schnapsmann.
Marsh Posté le 14-01-2005 à 22:34:30
friend c'est mal . La comparaison n'est pas une opération interne en plus
Marsh Posté le 14-01-2005 à 22:38:13
Taz a écrit : friend c'est mal . La comparaison n'est pas une opération interne en plus |
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.
Marsh Posté le 15-01-2005 à 00:31:30
ça n'a rien de clair. Tu est même obligé de foutre en l'air ton encapsulation avec un friend ... c'est clair ...
Marsh Posté le 15-01-2005 à 01:04:55
Code :
|
Marsh Posté le 15-01-2005 à 10:21:44
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
Marsh Posté le 15-01-2005 à 10:25:45
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.
Marsh Posté le 17-01-2005 à 15:39:01
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.
Marsh Posté le 17-01-2005 à 19:17:38
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 ?
Marsh Posté le 17-01-2005 à 20:22:07
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
Marsh Posté le 17-01-2005 à 22:10:06
Taz a écrit :
|
manque pas un ptit public: (ou struct) et un ; a la fin de la déclaration de classe ?
Marsh Posté le 18-01-2005 à 08:15:29
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 ?
Marsh Posté le 14-01-2005 à 12:49:25
Bonjour
j'ai une liste de personne
et j'aimerai pouvoir faire un sort dessus, et bien evidemment, ca ne marche pas
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
je sais pas si c'est super clair ...
thx
---------------
.