2016-06-22 26 views
0

Ich versuche Dijkstra Pathfinding-Algorithmus mit der std::priority_queue zu implementieren. Meine Queue ist vom Typ Node* und ich muss sie basierend auf einer float gScore gespeicherten Node von kleinsten gScore zu größten priorisieren. Ich habe die Dokumentation gelesen, aber ich verstehe immer noch nicht, wie das erreicht werden kann. Irgendwelche Ideen?Wie fügt man in C++ einen Schlüssel/eine Priorität zu std :: priority_queue hinzu?

Ich verstehe nicht, was die Art von CONTAINER_TYPE bedeutet (Vektor)

std::priority_queue<Node*> queue; 

ich Hilfe sehr schätzen!

Antwort

1

können Sie eine Klasse erstellen, die ()

class cmp 
{ 
    public: 
    bool operator()(const Node *a, const Node *b) const 
    { 
     return (a->gscore) > (b->gscore); 
    } 
}; 

Dann müssen überlasten

std::priority_queue<Node*,std::vector<Node*>,cmp); 
+0

nette und einfache Erklärung. Vielen Dank! – Bojangles

+0

@Bojangles Froh, dass ich helfen konnte.Wenn dies half, können Sie dies als Antwort akzeptieren. –

+0

Sollte sein: 'bool operator() (const Knoten * a, const Knoten * b) const' – Ajay

1

Sie eine Vergleichsfunktion. Ich denke, es wäre besser, in der unten angegebenen Weise zu implementieren, anstatt eine Klasse dafür zu deklarieren.

auto comp = [] (Node* a,Node* b) -> bool { return a->gscore < b->gscore; }; 
priority_queue< Node*, std::vector<Node*>, decltype(comp) > foo(comp); 
+0

Sieht kompliziert aus, aber ich werde es versuchen. Danke Herr – Bojangles

+1

Warum ein Verweis auf Zeiger? Lambda soll den Knoten oder seinen Inhalt nicht verändern – Ajay