Ogi*_*car 2 c++ priority-queue standard-library c++-standard-library max-heap
我知道std::priority_queue该类实现了最小堆。有没有办法将其用作最大堆?还是有替代的Maxheap结构?我知道我可以std::make_heap()在std::vectorlambda 上使用该函数来创建自己的Maxheap,但是随后使用诸如std::pop_heap()怪异的函数,并且我认为它们不易于使用。应该有一种更简单的方法,就像我认为的min_heap(priority queue)。
简答
最大堆:
priority_queue<int> maxHeap; // NOTE: default is max heap
Run Code Online (Sandbox Code Playgroud)
最小堆
priority_queue<int, vector<int> , greater<int>> minHeap;
Run Code Online (Sandbox Code Playgroud)
标头和命名空间:
#include <vector>
#include <priority_queue>
using namespace std;
Run Code Online (Sandbox Code Playgroud)
Compare可以提供用户提供的更改顺序,例如使用std::greater<T>会导致最小的元素显示为top()。
由于std::less<T>是template参数的默认模板Compare参数,因此默认情况下它已经是最大堆。如果要使用最小堆(上面的引用所建议的内容),请传递std::greater<T>而不是std::less<T>作为模板参数。
总结一下:
std::less<T>(这是默认的模板参数)。std::greater<T>。请注意,std::priority_queue它实际上是一个容器适配器(与数据结构相反)。它没有指定正在使用的底层数据结构。然而,由于操作的指定运行时间复杂度push(),pop()并且top(),它很可能为堆实现。