Sono molto nuovo al C++ e mi chiedevo se esistesse un modo per creare un heap minimo in C++ dalla libreria standard.C'è un modo semplice per creare un heap minimo in C++?
risposta
È 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>
.
Per chiarire: 'priority_queue
oh so se ho estratto da priority_queue in C++ avrò ottenuto il valore minimo? – Alex
Per chiarire ulteriormente, l'intero modello di 'priority_queue' accetta un tipo di contenitore, che per impostazione predefinita è' vector
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;
}
+1 per (sottilmente) sottolineando che 'priority_queue' è un max-heap. – avakar
fare domande e accettare nessuno. Questo comportamento è per abitudine o scelta? – Siddharth