我对C ++很新,我试图在C ++中使用Priority Queue STL实现Min Heap。我环顾网络,偶然发现了一个代码,我在底部添加了链接。
我理解矢量是如何工作的,我也理解了算子是什么,但是我不能理解如何回归i> j'在从最小到最大的元素排列中发挥作用。
我会在这里发布代码。
#include <queue>
#include <iostream>
using namespace std;
struct comparator {
bool operator()(int i, int j) {
return i > j;
}
};
int main(int argc, char const *argv[])
{
priority_queue<int, std::vector<int>, comparator> minHeap;
minHeap.push(10);
minHeap.push(5);
minHeap.push(12);
minHeap.push(3);
minHeap.push(3);
minHeap.push(4);
while (!minHeap.empty()) {
cout << minHeap.top() << " ";
minHeap.pop();
}
return 0;
}
有人可以跟踪程序的执行情况吗?我一直试图了解这个程序在过去几个小时里是如何运作的,但没有运气。
我从here
获得了代码答案 0 :(得分:0)
根据给定的标准,优先级队列第一个元素始终是它包含的最大元素。这个标准是你的仿函数comparator
。在这种情况下,它定义了对于两个给定元素,次要元素应该是第一个。
因此,在您的代码中,如果我们提取所有元素,则输出将是最小到最大的元素:
while (!minHeap.empty()) {
cout << minHeap.top() << " ";
minHeap.pop();
}
//output: 3,3,4,5,10,12
推送元素的算法就像堆: