Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

STL list + polymorphisme + tri

7 réponses
Avatar
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

7 réponses

Avatar
Jean-Marc Bourguet
"Philip K. Dick" writes:

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

Avatar
Sylvain Togni
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

Avatar
Philip K. Dick
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


Avatar
Fabien LE LEZ
http://www.usenet-fr.net/fr.usenet.reponses/usenet/repondre-sur-usenet.html
Avatar
Philip K. Dick
http://www.usenet-fr.net/fr.usenet.reponses/usenet/repondre-sur-usenet.html
Avatar
Philip K. Dick
http://www.usenet-fr.net/fr.usenet.reponses/usenet/repondre-sur-usenet.html
Avatar
Philip K. Dick
http://www.usenet-fr.net/fr.usenet.reponses/usenet/repondre-sur-usenet.html