【发布时间】:2019-12-07 19:44:50
【问题描述】:
我知道std::priority_queue 类实现了一个minheap。有没有办法将它用作最大堆?还是有替代的 Maxheap 结构?我知道我可以在带有 lambda 的 std::vector 上使用 std::make_heap() 函数来创建我自己的 Maxheap,但是使用诸如 std::pop_heap() 之类的函数很奇怪,我认为它们不容易使用。应该有一个更简单的方法,就像我认为的 min_heap(priority queue)。
【问题讨论】:
-
在 STL 中,堆与实际的容器实现分离。看看
std::make_heap。它允许您传递一个自定义比较器,在您的情况下可能是std::greater<>{}。 -
是的,我一直在使用它,但是当我尝试删除元素时使用 pop_heap() 然后 pop_back() 感觉很奇怪,所以我认为可能有更好的选择。谢谢。
-
@lubgr 请注意,
std::make_heap和标准库中的所有堆算法/项都会生成最大堆,而不是最小堆。因此,std::greater<>{}将构成最小堆。记住这一点的最简单方法是将堆实用程序想象成堆排序的实现细节。 -
@Justin 好点,我混淆了最小堆 -
std::greater,最大堆 -std::less。
标签: c++ priority-queue c++-standard-library standard-library max-heap