
我一直在研究 Leetcode 中的 C 中的 priority_queue,我從解決方案中找到了這段代碼,我知道這是最小堆,但不明白這是如何將 3 個元素存盤到 minHeap 的。
- 是
vector<int>得到matrix[r][0],vector<vector<int>>得到r和greater<>得到0???? - 為什么我們需要放
priority_queue<int,vector<int>,greater<int>> minHeap一個vector<int>來做最小堆?
uj5u.com熱心網友回復:
首先,我們來看看類中模板引數的含義minHeap。
從cppreference:
template< class T, class Container = std::vector<T>, class Compare = std::less<typename Container::value_type> class priority_queue;模板引數
T - 存盤元素的型別。...
Container - 用于存盤元素的底層容器的型別。...
比較- 提供嚴格弱排序的比較型別。
因此,對于minHeap,它包含vector<int>物件。它使用 avector<vector<int>>作為底層存盤來包含這些vector<int>物件。它用于greater<>比較兩個vector<int>物件以確定它們的順序。
有什么greater<>意義?該Compare引數用于決定哪個元素在頂部。默認情況下,priority_queue使用less<>,這意味著較大的元素位于頂部。相反,它會翻轉比較的greater<>方向,因此較小的元素會出現在頂部。這就是使它成為“最小”堆的原因。
現在,查看對push的呼叫:
void push( const value_type& value ); void push( value_type&& value ); (since C 11)
push只接受一個引數,并且引數的型別是value_type,在這種情況下是vector<int>.
所以這條線
minHeap.push({matrix[r][0], r, 0});
實際上是添加一個vector<int>到minHeap. vector<int>其中包含的值為matrix[r][0]、r和0。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/486143.html
