So verschieben Sie Elemente aus der AWL-Prioritätswarteschlange

Die STL-Prioritätswarteschlange von C ++ verfügt über eine Methode void pop () und eine Methode const ref top (). Wenn Sie also Elemente aus der Warteschlange verschieben möchten, müssen Sie Folgendes tun:

T moved = std::move(const_cast<T&>(myQueue.top())));
myQeue.pop();

Dadurch wird die Spitze effektiv in keine Konstante umgewandelt, sodass sie verschoben (anstatt kopiert) werden kann. Ich mag diesen Code nicht, weil der erzwungene Zug die Invarianten der Prioritätswarteschlange ungültig machen kannsollte Egal wegen dem Pop, aber die Dingekönnten schief gehen.

Gibt es einen besseren Weg, um den Pop / Move zu erreichen? Warum gibt es keine T && top_and_pop () Funktion?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage