Ich kann keine (benutzerdefinierte) priority_queue-Referenz übergeben. Die Prioritätswarteschlange wurde mit Lambda angepasst. Gibt es eine Problemumgehung? Ich habe versucht, functors und all das zu verwenden, aber keiner von ihnen würde mich über die Erstellung der priority_queue hinausgehen lassen, ohne den Kompilierungsschritt mit verschiedenen Problemen zu durchlaufen, bei denen der priority_queue-Konstruktor die Sortiermethode nicht akzeptierte. Ich denke, es kann nicht das Lambda erreichen oder es braucht nur eine spezielle Typ-Deklaration in der Kopfzeile, aber ich kann es nicht herausfindenÜbergeben der benutzerdefinierten Prioritätswarteschlange durch Referenz
Hier ist eine vereinfachte Version meines Codes.
#include <queue>
#include <memory>
struct Node
{
int full_dist,
dist1,
dist2;
Node(int d1, int d2) { full_dist = d1 + d2; }
};
void some_processing(std::priority_queue<std::shared_ptr<Node>>& nodes)
{
//something being done with the queue
}
int main()
{
auto comp = [] (const std::shared_ptr<Node>& l, const std::shared_ptr<Node> r) -> bool
{ return l->full_dist > r->full_dist; };
std::priority_queue<std::shared_ptr<Node>, std::vector<std::shared_ptr<Node>>, decltype(comp)> nodes(comp);
some_processing(nodes);//breaks here
}
Hier ist der Fehler, den ich auf diesem Beispiel haben:
test.cpp:24:24: error: invalid initialization of reference of type ‘std::priority_queue<std::shared_ptr<Node> >&’
from expression of type ‘std::priority_queue<std::shared_ptr<Node>, std::vector<std::shared_ptr<Node>, std::allocator<std::shared_ptr<Node> > >, main()::__lambda0>’
some_processing(nodes);
Vielen Dank, das erklärt eine Menge – Liza