Bonjour à tous.
Est-il possible faire une surcharge d'operateur sur des pointeurs de classe?
par exemple:
me renvoie une erreur de compilation...Code:bool operator< (Node* n1, Node* n2);
merci pour votre aide :D
Version imprimable
Bonjour à tous.
Est-il possible faire une surcharge d'operateur sur des pointeurs de classe?
par exemple:
me renvoie une erreur de compilation...Code:bool operator< (Node* n1, Node* n2);
merci pour votre aide :D
Une surcharge perso d'opérateur doit avoir pour opérande au moins un type défini par l'utilisateur. Or là tu veux comparer deux pointeurs, qui sont des types primitifs.
Mais je vois mal pourquoi on voudrait redéfinir ce genre d'oparateur, si tu veux comparer deux Node alors écris un operator < (const Node& n1, const Node& n2) et déréférence tes pointeurs au moment de la comparaison.
Merci pour ta réponse.
En fait j'essaye d'utiliser une priority_queue, qui contient des pointeurs de Node.
Apparament la manière la plus simple d'en utiliser une est de surcharger operator< sur les objets qu'elle contient.
on peut ainsi déclarer la priority_queue de cette manière:
Je viens de trouver une autre manière, mais je ne trouve pas ça très compréhenssible:Code:priority_queue<Node*> openList;
et je dois déclarer ma priority queue comme ça:Code:
1
2
3
4
5 class NodeCompare { public: bool operator()(const Node* n1, const Node* n2) const{ return *n1 > *n2; } };
Edit: En fait je viens de me rendre compte que des pointeurs dans une priority_queue, c'etait pas malin :aie:. Il suffit en effet qu'un des objets pointé soit changé pour que la priority_queue ne soit plus dans le bon ordre...Code:priority_queue<Node*,vector<Node*>,NodeCompare> openList;
Oui, utiliser un foncteur est la meilleure manière de faire. On ne peut pas toujours créer un opérateur < personnalisé (comme tu peux le voir ici), donc on te donne la possibilité de fournir une fonction quelconque, sous forme de foncteur.
Si tu as du mal avec les foncteurs jette un oeil à la FAQ.