STL-Priority-Queue auf benutzerdefinierte Klasse
Ich habe eine Menge ärger bekommen, meine Priorität zu erkennen, welche parameter sollte es Sortieren. Ich habe überladen den operator " kleiner als auf meiner eigenen Klasse, aber es scheint nicht, es zu benutzen. Hier ist der relevante code:
Knoten.h
class Node
{
public:
Node(...);
~Node();
bool operator<(Node &aNode);
...
}
Node.cpp
#include "Node.h"
bool Node::operator<(Node &aNode)
{
return (this->getTotalCost() < aNode.getTotalCost());
}
getTotalCost() gibt einen int
main.cpp
priority_queue<Node*, vector<Node*>,less<vector<Node*>::value_type> > nodesToCheck;
Was bin ich fehlt und/oder falsch?
InformationsquelleAutor der Frage bmalicoat | 2009-10-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
less<vector<Node*>::value_type>
Bedeutet, dass Ihre Komparator vergleicht die Zeiger zu einander, d.h. der Vektor wird sortiert, indem das layout in den Speicher der Knoten.Du willst, so etwas zu tun:
Beachten Sie, dass müssen Sie const-korrekt in Ihre definition von
totalCost
.EDIT: Jetzt, dass C++11 ist hier, Sie brauchen nicht zu Erben von std::binary_function mehr (was bedeutet, dass Sie nicht brauchen, um #include funktionale)
InformationsquelleAutor der Antwort rlbond
Sie brauchen, um Ihre parameter
const
denn ab jetzt geben Sie es ein nicht-Kosten Referenz, was bedeutet, dass Sie möglicherweise ändern Sie das Objekt, das Sie sind zu vergleichen mit. (Was Sie nicht sind, und wahrscheinlich sollte nicht).Dass Sie nicht const-korrekt. Ihre
operator<
keine änderungen an den Knoten, so dass die Funktion const:Danach, wenn Sie Probleme beim aufrufen der
getTotalCost()
- Funktion, ist es wahrscheinlich, dass es ist nicht const, wie gut. Markieren Sie es als const, wenn es nicht bereits:Dein code ist jetzt (mehr) const-korrekt.
On a side note, binäre Operatoren sind üblicherweise außerhalb der Klasse:
InformationsquelleAutor der Antwort GManNickG