有没有一种简单的方法可以在C++;? 我对C++有很新的认识,我想知道是否有一种方法可以从C++库中生成一个MIN堆。 < p>可以使用 STD::MaxyHeope, STD::PuthHythPox< /Cuff>,或者可以使用 STD::PrimRythyQueLe>/Cudio>,在 STD::vector < /Calp>或类似。
有没有一种简单的方法可以在C++;? 我对C++有很新的认识,我想知道是否有一种方法可以从C++库中生成一个MIN堆。 < p>可以使用 STD::MaxyHeope, STD::PuthHythPox< /Cuff>,或者可以使用 STD::PrimRythyQueLe>/Cudio>,在 STD::vector < /Calp>或类似。,c++,data-structures,heap,min,C++,Data Structures,Heap,Min,std::*\u heap方法位于中,而std:::priority\u queue模板位于使用make\u heap()和朋友,在中定义,或者使用中定义的priority\u queue。priority\u队列使用make\u heap和下面的朋友 #include <queue> // functional,iostream,ctime,cstdlib using namespace std; int main(int argc, char* argv[]) { sr
std::*\u heap
方法位于
中,而std:::priority\u queue
模板位于
使用make\u heap()
和朋友,在
中定义,或者使用
中定义的priority\u queue
。priority\u队列使用make\u 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;
}
#包括//functional、iostream、ctime、cstdlib
使用名称空间std;
int main(int argc,char*argv[])
{
srand(时间(0));
优先级队列q;
对于(int i=0;i!=10;++i)q.push(rand()%10);
CUTE澄清:<代码> PrimyIyQueLe>代码>是一个操作堆,代码为<代码> PUT>代码>和 POP>代码,可以放在容器中,支持比较。如果我从C++中的PrimRythyQuein中弹出,将得到最小值。iner类型,默认为vector
。任何支持随机迭代和push\u back
的容器都足够了。如果说我有优先级队列,我该如何设置队列的排序功能?为了进一步澄清,priority\u队列
是一个最大堆,如果你想要一个最小堆,你必须使用std::greater
作为比较。请参见威廉的回答。+1(巧妙地)指出,优先级队列
是一个最大的堆。你问问题却不接受。这种行为是习惯还是选择?