utiliser des conteneurs stl triés de pointeurs, definir critere comparaison
Bonjour,
Je début en programmation c++, mais j'ai tout de même une base.
pour un certain code j'ai voulu utiliser la stl afin de créer une liste triée d'objets.
Voici mon objet en très simplifié :
Code:
1 2 3 4 5 6 7 8 9 10 11
|
class Noeud {
public:
(constructeurs et autres...)
int lireValeur() const {return Valeur;};
bool operator< (const Noeud & n2) {return (Valeur< n2.lireValeur());
private:
int Valeur;
autre déclarations...
} |
Il possède donc un opérateur de comparaison < surchargé pour comparer des objets entre eux. C'est l'opérateur choisi par défaut, si mes références sont bonnes, pour les conteneurs qui trient automatiquement les données, notamment priority_queue<> (ou map, set...)
J'ai voulu, parceque mon code a ce moment était plus facile à écrire comme ça, utiliser des pointeurs vers ces objets.
J'ai donc crée une liste: priority_queue<Noeud *> maListe; , et l'ai remplie avec des pointeurs vers mon objet. Mais évidemment, il ne les a pas du tout trié comme je voulais : c'est normal, une comparaison entre pointeurs ne compare pas les objets, mais les valeurs des pointeurs (c'est à dire des adresses mémoire, imprévisibles).
Alors ni une ni deux j'ai crée une fonction :
Code:
1 2 3 4
|
bool operator<(const Noeud * n1, const Noeud * n2) {
return ( *n1 < *n2 );
} |
et là... vlan ! ni une ni deux erreur :
Citation:
/Desktop/TP6/tp6.cpp:55: error: 'bool operator<(const Noeud*, const Noeud*)' must have an argument of class or enumerated type
Utiliser des pointeurs pour remplir mon tableau trié n'est pas une bonne idée, et je dois donc changer mon code pour y mettre les objets pointés directement ? ou alors c'est à ce moment qu'on doit utiliser ces fameuses classes de comparaison ou foncteurs? (et si oui comment ou alors avez vous un lien pour un exemple avec une utilisation claire?)