有没有一种简单的方法可以在C++中创建最小堆?

问题描述:

我对C++很陌生,我想知道是否有一种方法可以从标准库中制作C++的最小堆。有没有一种简单的方法可以在C++中创建最小堆?

+2

您提出问题并且不接受任何答案。这是习惯还是选择? – Siddharth 2014-09-24 05:06:46

您可以直接使用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

使用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