STL list + polymorphisme + tri

Le
Philip K. Dick
Hello

Je voudrais utiliser une liste contenant des objets
de type A et B, ou B dérive de A.

class A {
public:
()
virtual afficher();
};

class B : public A {
public:
()
afficher();
}

Le but étant d'utiliser le polymorphisme,
j'ai donc utilisé une liste de A*

main () {
()
list<A*> l;
()
for (list<A*>::iterator i=l.begin(); i!=l.end(); i++)
(*i)->afficher();
}

Mon problème c'est que je voudrais trier la liste à la
demande, or :
l.sort();
trie des *pointeurs* et n'utilise pas la relation d'ordre
que j'ai définie dans A (normal).
Je ne peux pas non plus re-définir ">" sur des A*

Alors, mon problème est-il insoluble (je ne souhaite pas
utiliser un autre conteneur que 'list') ???

PKD
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Jean-Marc Bourguet
Le #305411
"Philip K. Dick"
Mon problème c'est que je voudrais trier la liste à la
demande, or :
l.sort();


Il y a une version de list<>::sort qui prend un predicat.

A+

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org

Sylvain Togni
Le #305410
Philip K. Dick wrote:

Mon problème c'est que je voudrais trier la liste à la
demande, or :
l.sort();
trie des *pointeurs* et n'utilise pas la relation d'ordre
que j'ai définie dans A (normal).
Je ne peux pas non plus re-définir ">" sur des A*


std::list a une deuxième fonction (template) sort qui
prend en paramètre un prédicat.

--
Sylvain Togni

Philip K. Dick
Le #305409
Merci à tous pour vos réponses

Philip K. Dick wrote:
Hello

Je voudrais utiliser une liste contenant des objets
de type A et B, ou B dérive de A.

class A {
public:
(...)
virtual afficher();
};

class B : public A {
public:
(...)
afficher();
}

Le but étant d'utiliser le polymorphisme,
j'ai donc utilisé une liste de A*

main () {
(...)
list<A*> l;
(...)
for (list<A*>::iterator i=l.begin(); i!=l.end(); i++)
(*i)->afficher();
}

Mon problème c'est que je voudrais trier la liste à la
demande, or :
l.sort();
trie des *pointeurs* et n'utilise pas la relation d'ordre
que j'ai définie dans A (normal).
Je ne peux pas non plus re-définir ">" sur des A*

Alors, mon problème est-il insoluble (je ne souhaite pas
utiliser un autre conteneur que 'list') ???

PKD


Publicité
Poster une réponse
Anonyme