2010-05-07 26 views

Répondre

4

Vous pouvez utiliser std::make_heap, std::push_heap, et d'autres directement, ou vous pouvez utiliser un std::priority_queue construit sur un std::vector ou similaire.

Les méthodes std::*_heap sont en <algorithm>, et le modèle std::priority_queue est en <queue>.

+0

Pour clarifier: 'priority_queue ' est un min-tas avec les opérations 'push' et' pop' pour tout type 'X' qui peut être mis dans un conteneur et supporte la comparaison. – Potatoswatter

+0

oh donc si je suis sorti de la priority_queue en C++ j'obtiendrais la valeur min? – Alex

+0

Pour plus de précisions, le modèle entier de 'priority_queue' accepte un type de conteneur, qui par défaut est' vector '. Tout conteneur qui supporte l'itération aléatoire et 'push_back' suffira cependant. – jemfinch

30

Utilisez make_heap() et vos amis, définis dans <algorithm>, ou utilisez priority_queue, défini dans <queue>. Le priority_queue utilise make_heap et des amis en dessous.

#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 pour indiquer (subtilement) que 'priority_queue' est un tas maximum. – avakar