簡體   English   中英

C++標准庫中有maxheap嗎?

[英]Is there a maxheap in the C++ standard library?

我知道std::priority_queue類實現了一個 minheap。 有沒有辦法將它用作最大堆? 還是有替代的 Maxheap 結構? 我知道我可以在帶有 lambda 的std::vector上使用std::make_heap()函數來創建我自己的 Maxheap 但是使用諸如std::pop_heap()函數很奇怪,我認為它們不容易利用。 應該有一種更簡單的方法,就像我認為的 min_heap(priority queue) 一樣。

關於std::priority_queue

可以提供用戶提供的Compare來更改順序,例如,使用std::greater<T>會使最小的元素顯示為top()

由於std::less<T>Compare template參數的默認模板參數,因此默認情況下它已是最大堆 如果要使用最小堆 (上面的引用所建議的內容),請傳遞std::greater<T>而不是std::less<T>作為模板參數。

總結一下:

  • 最大堆:傳遞std::less<T> (這是默認模板參數)。
  • 最小堆:通過std::greater<T>

注意std::priority_queue實際上是一個容器適配器 (與數據結構相反)。 它沒有指定正在使用的底層數據結構。 但是,由於操作push()pop()top()的指定運行時復雜性,很可能將其實現為堆。

簡答

最大堆:

priority_queue<int> maxHeap; // NOTE: default is max heap

最小堆

priority_queue<int, vector<int> , greater<int>> minHeap;

標頭和命名空間:

#include <vector>
#include <priority_queue>

using namespage std;

就像沒有“搜索樹”或“哈希圖”一樣,沒有“堆”容器(不是后兩個,而是有序和無序的關聯容器,實際上是使用那些數據結構實現的,因為沒有其他數據結構可以滿足為這些容器指定的要求)。

一種容器適配器std::priority_queue ,其可以適應SequenceContainer( std::vector被默認改編),並提供相同的操作,一個最大/最小堆做,而且很可能在內部被實施為某種堆。

還有std::make_heap ,可用於在隨機訪問范圍內強制使用最大堆屬性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM