我对C++很陌生,不知道是否有一种方式可以使用标准库在C++中创建一个小根堆。
我对C++很陌生,不知道是否有一种方式可以使用标准库在C++中创建一个小根堆。
使用定义在<algorithm>
中的make_heap()
和相关函数,或者使用定义在<queue>
中的priority_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;
}
priority_queue
是一个最大堆。 - avakarstd::make_heap
、std::push_heap
等函数,或者使用基于std::vector
的std::priority_queue
容器。
std::*_heap
方法在<algorithm>
头文件中,而std::priority_queue
模板在<queue>
头文件中。priority_queue
的整个模板接受一个容器类型,默认为vector<T>
。然而,任何支持随机迭代和push_back
的容器都可以。 - jemfinchpriority_queue<T, container, comp>
。这个问题和你原来的问题,老实说,都应该可以自己通过谷歌搜索找到令人满意的答案。 - jemfinchNode::operator<
。 - Potatoswatterpriority_queue
是一个大根堆,如果你想要一个小根堆,你需要使用std::greater
作为比较器。请参考Wilhelm的回答。 - avakar