zu initialisieren in construction of a priority queue gesagt wird, Option (12):Was ist der schnellste Weg, um eine priority_queue von einer unordered_set
template< class InputIt >
priority_queue(InputIt first, InputIt last,
const Compare& compare = Compare(),
Container&& cont = Container());
Aber ich weiß nicht, wie das ot zu verwenden. Ich habe eine nicht leere std::unordered_set<std::shared_ptr<MyStruct>> mySet
, und ich möchte es in eine Prioritätswarteschlange konvertieren. Außerdem erstelle ich einen Komparator struct MyComparator
:
struct MyComparator {
bool operator()(const std::shared_ptr<myStruct>& a,
const std::shared_ptr<myStruct>& b){...}
};
Nun, wie ich ein neues priority_queue myQueue
in einer besseren Art und Weise bauen kann? Früher habe ich die folgende und es funktioniert:
std::priority_queue<std::shared_ptr<MyStruct>, std::deque<std::shared_ptr<MyStruct>, MyComparator>
myQueue(mySet.begin(), mySet.end());
gebenchmarkt ich sowohl Vektor- als auch deque, und ich finde, deque wird Vektor übertreffen, wenn die Größe relativ groß ist (~ 30K). Da wir bereits die Größe mySet
kennen, sollte ich die Deque mit dieser Größe erstellen. Aber wie kann ich diese priority_queue mit meinem eigenen Komparator und vordefinierten Deque erstellen, sagen wir myDeque
?
Werden Sie später weitere Elemente in die Prioritätswarteschlange einfügen? –
Ja, der Algorithmus wird den schwersten knallen, seinen Status überprüfen und weitere Objekte hinzufügen, die mit dem schwersten zusammenhängen. Diese Art der Insertion könnte wahrscheinlich viele Male vorkommen (etwa die Hälfte der ursprünglichen Größe). –