Poiché sia std::priority_queue
e std::set
(e std::multiset
) sono contenitori di dati che memorizzano gli elementi e consentono di accedervi in modo ordinato e hanno la stessa complessità di inserimento O(log n)
, quali sono le vantaggi dell'utilizzo dell'uno sull'altro (o, che tipo di situazioni richiedono l'uno o l'altro?)?Differenza tra std :: set e std :: priority_queue
Anche se so che le strutture sottostanti sono diverse, non sono tanto interessati alla differenza nella loro attuazione, come io sono in confronto loro prestazioni e idoneità per vari usi.
Nota: Conosco i non duplicati in un set. Ecco perché ho anche menzionato lo std::multiset
poiché ha lo stesso identico comportamento dello std::set
ma può essere usato dove i dati memorizzati possono essere paragonati come elementi uguali. Quindi, per favore, non commentare il problema delle chiavi singole/multiple.
La coda di priorità offre solo l'accesso all'elemento * più grande *, mentre il set offre un ordine completo di * tutti * elementi. Questa interfaccia più debole significa che le implementazioni potrebbero essere più efficienti (ad es. È possibile memorizzare i dati della coda effettiva in un 'vector', che potrebbe avere prestazioni migliori a causa della sua localizzazione di memoria). –
@KerrekSB La risposta più elaborata è in realtà un commento: D Nessuno ha mai commentato le prestazioni. Potresti metterlo in una risposta, magari espandere un po '? – penelope
Il punto di libreria standard chiave è che 'priority_queue' è implementato in termini di' heap * '-algoritmi da' ', applicato a un contenitore ad accesso casuale sottostante. –