2011-10-18 10 views
5

Mi stavo chiedendo quando il C++ STL priority_queue si ordina da solo. Voglio dire lo fa insert in un posto corretto quando si push l'elemento in, o si ordina e ti dà l'elemento di massima priorità quando si peek o pop fuori? Lo sto chiedendo perché il mio priority_queue<int> conterrà un indice per un array che potrebbe avere valori aggiornati e voglio aggiornarlo quando lo faccio pq.top();.Quando si ordina un oggetto std :: priority_queue <>?

#include <cstdio> 
#include <algorithm> 
#include <queue> 
using namespace std; 

int main() { 
    priority_queue<int> pq; 
    pq.push(2); 
    pq.push(5); //is the first element 5 now? or will it update again when I top() or pop() it out? 
    return 0; 
} 

Grazie.

+0

Potete scoprire queste proprietà con facilità, perché come 'map' ci vuole un predicato confronto. Se fornisci un predicato di confronto che stampa sulla console (ad esempio) ad ogni confronto, sarai testimone dal vivo quando viene richiamato (e su quali valori). –

risposta

10

Si opera durante push() e pop(), che sollecitano le funzioni sottostanti modifica mucchio (push_heap() e pop_heap()). top() richiede tempo costante.

+0

Fantastico, è esattamente quello che volevo sentire. Segnalo come risposta una volta che il limite di tempo scompare. –

+1

L'esempio [qui] (http://www.sgi.com/tech/stl/priority_queue.html) dimostra il comportamento molto bene –

+0

@StanleyCen: Sono contento di poter aiutare, anche se ho davvero cancellato l'informazione [qualche sito web ] (http://www.cplusplus.com/reference/stl/priority_queue/pop/) ... –

1

Si ordina automaticamente quando viene inserito un nuovo elemento o ne viene rimosso uno esistente. This might help.

Problemi correlati