2010-05-07 18 views

Respuesta

4

Usted puede utilizar std::make_heap, std::push_heap, y otros directamente, o puede utilizar un std::priority_queue construido sobre una std::vector o similar.

Los métodos std::*_heap están en <algorithm>, y la plantilla std::priority_queue está en <queue>.

+0

Para aclarar: 'priority_queue ' es un min-heap con operaciones 'push' y' pop' para cualquier tipo 'X' que se puede colocar en un contenedor y admite la comparación. – Potatoswatter

+0

oh, si saliera de la prioridad_cola en C++, ¿obtendría el valor mínimo? – Alex

+0

Para aclarar aún más, la plantilla entera de 'priority_queue' acepta un tipo de contenedor, que por defecto es 'vector '. Sin embargo, cualquier contenedor que soporte iteración aleatoria y 'push_back 'será suficiente. – jemfinch

30

Use make_heap() y sus amigos, definidos en <algorithm>, o use priority_queue, definidos en <queue>. El priority_queue usa make_heap y amigos debajo.

#include <queue> // functional,iostream,ctime,cstdlib 
using namespace std; 

int main(int argc, char* argv[]) 
{ 
    srand(time(0)); 
    priority_queue<int,vector<int>,greater<int> > q; 
    for(int i = 0; i != 10; ++i) q.push(rand()%10); 
    cout << "Min-heap, popped one by one: "; 
    while(! q.empty()) { 
     cout << q.top() << ' '; // 0 3 3 3 4 5 5 6 8 9 
     q.pop(); 
    } 
    cout << endl; 
    return 0; 
} 
+10

+1 para (sutilmente) señalar que 'priority_queue' es un montón máximo. – avakar

Cuestiones relacionadas