[英]Min Heap using STL Priority Queue explanation
我對C ++相當陌生,我試圖使用C ++中的Priority Queue STL實現Min Heap。 我環顧四周,偶然發現了一個代碼,該代碼是我在底部添加的鏈接。
我了解向量的工作原理,也了解函子是什么,但我無法理解“ return 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;
}
有人可以跟蹤程序的執行情況嗎? 我一直在嘗試了解該程序在過去的幾個小時中是如何運作的,但是沒有運氣。
我從這里得到代碼
根據給定的標准,優先級隊列中的第一個元素始終是它包含的最大元素。 此標准是您的函子comparator
。 在這種情況下,它定義了對於兩個給定元素,次要元素應該是第一個。
因此,在您的代碼中,如果我們提取所有元素,則輸出將是從最小到最大排序的元素:
while (!minHeap.empty()) {
cout << minHeap.top() << " ";
minHeap.pop();
}
//output: 3,3,4,5,10,12
推入元素的算法就像堆:
comparator
)將新元素與其父元素進行comparator
。 在這種情況下,您的比較是“如果新元素較小”,則將其與其父元素交換。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.