2011-10-18 16 views
5

Me preguntaba cuándo se clasifica el C++ STL priority_queue. Me refiero a insert en un lugar correcto cuando push el artículo en, o se clasifica a sí mismo y le da el elemento de mayor prioridad cuando peek o pop a cabo? Pregunto esto porque mi priority_queue<int> contendrá un índice a una matriz que puede tener valores actualizados, y quiero que se actualice cuando lo haga pq.top();.¿Cuándo se ordena una 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; 
} 

Thanks.

+0

Usted puede descubrir esas propiedades fácil, porque al igual que 'map' que se necesita un predicado de comparación. Si proporciona un predicado de comparación que se imprime en la consola (por ejemplo) en cada comparación, será testigo directo cuando se invoque (y en qué valores). –

Respuesta

10

El trabajo se realiza durante push() y pop(), que llamar a las funciones de modificación montón subyacentes (push_heap() y pop_heap()). top() toma un tiempo constante.

+0

Impresionante, eso es exactamente lo que quería escuchar. Voy a marcar esto como respuesta una vez que el límite de tiempo desaparece. –

+1

El ejemplo [aquí] (http://www.sgi.com/tech/stl/priority_queue.html) demuestra el comportamiento realmente bien –

+0

@StanleyCen: Me alegro de haber podido ayudar, aunque realmente acabo de quitarle la información [en algún sitio web ] (http://www.cplusplus.com/reference/stl/priority_queue/pop/) ... –

1

Se ordena solo cuando se inserta un nuevo elemento o se elimina uno existente. This might help.

Cuestiones relacionadas