 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
LaFleche Guest
|
Posted: Sat Mar 06, 2004 10:21 am Post subject: vector et sort |
|
|
Bonjour,
Je cherche à trier un vector avec la fonction sort de la stl.
J'ai donc redéfini l'opérateur < dans ma classe A de la manière suivante
------A.h------
bool operator<(const A& a)const
Le problème c'est que le sort fonctionne si mon vector contient des
instances de A (vector
Existe-il un moyen (propre si possible) de contourner le problème?
Merci
|
|
| Back to top |
|
 |
Patrick Mézard Guest
|
Posted: Sat Mar 06, 2004 11:47 am Post subject: Re: vector et sort |
|
|
LaFleche wrote:
| Quote: | Bonjour,
Je cherche à trier un vector avec la fonction sort de la stl.
J'ai donc redéfini l'opérateur < dans ma classe A de la manière suivante
------A.h------
bool operator<(const A& a)const
Le problème c'est que le sort fonctionne si mon vector contient des
instances de A (vector
Existe-il un moyen (propre si possible) de contourner le problème?
Merci
|
Oui, créer un prédicat de comparaison du genre :
struct CompareA
{
inline bool operator()(const A* a1, const A* a2) const
{
//Gèrer le cas s'ils peuvent être NULLs
assert(a1!=0 && a2!=0);
return (*a1)<(*a2);
}
};
et appeler le sort de la manière suivante :
typedef std::vector
AArray array;
[...] //on remplit array
std::sort(array.begin(), array.end(), CompareA());
L'intérêt principal de cette méthode (qui marche aussi dans le cas où le
conteneur contient des instances et non des pointeurs) est qu'elle
permet de définir différents critères de tris, au lieu d'un seul basé
sur l'operateur < du type en question.
Patrick Mézard
|
|
| Back to top |
|
 |
LaFleche Guest
|
Posted: Sat Mar 06, 2004 12:17 pm Post subject: Re: vector et sort |
|
|
Patrick Mézard wrote:
| Quote: | LaFleche wrote:
Bonjour,
Je cherche à trier un vector avec la fonction sort de la stl.
J'ai donc redéfini l'opérateur < dans ma classe A de la manière suivante
------A.h------
bool operator<(const A& a)const
Le problème c'est que le sort fonctionne si mon vector contient des
instances de A (vector
Existe-il un moyen (propre si possible) de contourner le problème?
Merci
Oui, créer un prédicat de comparaison du genre :
struct CompareA
{
inline bool operator()(const A* a1, const A* a2) const
{
//Gèrer le cas s'ils peuvent être NULLs
assert(a1!=0 && a2!=0);
return (*a1)<(*a2);
}
};
et appeler le sort de la manière suivante :
typedef std::vector
AArray array;
[...] //on remplit array
std::sort(array.begin(), array.end(), CompareA());
L'intérêt principal de cette méthode (qui marche aussi dans le cas où le
conteneur contient des instances et non des pointeurs) est qu'elle
permet de définir différents critères de tris, au lieu d'un seul basé
sur l'operateur < du type en question.
Patrick Mézard
|
Parfait et je viens de voir que ca marche aussi avec un set
Merci beaucoup pour ta réponse.
|
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|