2010-05-07 8 views

risposta

4

È possibile utilizzare std::make_heap, std::push_heap e altri direttamente oppure è possibile utilizzare uno std::priority_queue creato su un std::vector o simile.

I metodi std::*_heap sono in <algorithm> e il modello std::priority_queue è in <queue>.

+0

Per chiarire: 'priority_queue ' è un min-heap con operazioni 'push' e' pop' per qualsiasi tipo 'X' che può essere inserito in un contenitore e supporta il confronto. – Potatoswatter

+0

oh so se ho estratto da priority_queue in C++ avrò ottenuto il valore minimo? – Alex

+0

Per chiarire ulteriormente, l'intero modello di 'priority_queue' accetta un tipo di contenitore, che per impostazione predefinita è' vector '. Qualsiasi contenitore che supporta l'iterazione casuale e 'push_back' sarà sufficiente, tuttavia. – jemfinch

30

Utilizzare make_heap() e gli amici, definito in <algorithm> o utilizzare priority_queue, definito in <queue>. Il priority_queue utilizza make_heap e gli amici sottostanti.

#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 per (sottilmente) sottolineando che 'priority_queue' è un max-heap. – avakar

Problemi correlati