2010-05-07 111 views

回答

4

您可以直接使用std::make_heap,std::push_heap等,或者您可以使用建立在std::vector或類似物上的std::priority_queue

std::*_heap方法在<algorithm>,而std::priority_queue模板在<queue>

+0

澄清:'priority_queue '是一個最小堆,操作'push'和'pop'用於任何類型'X',可以放在容器中並支持比較。 – Potatoswatter 2010-05-07 05:34:42

+0

哦,所以如果我從C++中的priority_queue彈出我會得到最小值? – Alex 2010-05-07 05:39:22

+0

爲了進一步闡明,'priority_queue'的整個模板接受一個容器類型,默認爲'vector '。但是,任何支持隨機迭代和'push_back'的容器就足夠了。 – jemfinch 2010-05-07 05:40:33

30

使用make_heap()和朋友,在<algorithm>中定義或使用priority_queue,在<queue>中定義。 priority_queue使用make_heap和底下的朋友。

#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(微妙地)指出'priority_queue'是一個最大堆。 – avakar 2010-05-07 08:29:55

相關問題