Da sowohl std::priority_queue
und std::set
(und std::multiset
) sind Datencontainer, die Elemente speichern und lassen Sie sie in einer geordneten Art und Weise zuzugreifen, und haben gleiche Einfügungs Komplexität O(log n)
, was sind die Vorteile der Verwendung von einer über die andere (oder, welche Art von Situationen erfordern die eine oder andere?)?Unterschied zwischen std :: set und std :: priority_queue
Während ich weiß, dass die zugrunde liegenden Strukturen unterschiedlich sind, bin ich nicht so viel Interesse für den Unterschied in der Umsetzung als ich im Vergleich bin ihr Leistung und Eignung für verschiedene Anwendungen.
Hinweis: Ich weiß über die No-Duplikate in einem Satz. Deshalb habe ich auch std::multiset
erwähnt, da es genau das gleiche Verhalten wie die std::set
hat, aber verwendet werden kann, wenn die gespeicherten Daten als gleiche Elemente verglichen werden dürfen. Also, bitte, kommentieren Sie nicht das Problem mit einzelnen/mehreren Schlüsseln.
Die Prioritätswarteschlange bietet nur Zugriff auf das * größte * Element, während das Set eine vollständige Sortierung von * allen * Elementen bietet. Diese schwächere Schnittstelle bedeutet, dass Implementierungen effizienter sein können (z. B. können Sie die tatsächlichen Warteschlangendaten in einem "Vektor" speichern, der aufgrund seiner Speicherlokalität eine bessere Leistung aufweisen kann). –
@KerrekSB Die ausgefeilteste Antwort ist eigentlich ein Kommentar: D Nobody hat die Performance überhaupt nicht kommentiert. Könnten Sie das zu einer Antwort hinzufügen, vielleicht ein wenig erweitern? – penelope
Der Schlüssel Standardbibliothek Punkt ist, dass 'priority_queue' in Bezug auf die' heap * '- Algorithmen von' ', angewendet auf einen zugrunde liegenden Random-Access-Container implementiert wird. –