【演算法學習】老演算法,新姿勢,STL——Heap

來源:互聯網
上載者:User

標籤:有序   cto   make   堆排   排序   algo   實現   queue   一般來說   

“堆”是一個大家很熟悉的資料結構,它可以在\(O(log\;n)\)的時間內維護集合的極值。

這都是老套路了,具體的內部實現我也就不談了。

我一般來說,都是用queue庫中的priority_queue,也就是STL的優先隊列來實現堆的,然而最近我發現了一個新的STL容器,它相對優先隊列有著更小的常數和更方便的操作。

它就是heap,就是堆。

關於heap,STL提供了4個函數,它們都定義於algorithm庫中。它們分別是:

sort一樣,其中_First_Last都是頭,尾指標或迭代器(對應vector或queue),而_Cmp表示了元素間的大小關係函數。

類似sort,堆中的元素是[_First, _Last)的區間,若記憶體不連續,也至少要是可隨機訪問的迭代器(如vector)。

其中_Cmp不是必要的。

還需注意這些函數維護的均是大根堆(即父親值比孩子大的堆,也稱最大堆)。

建立堆:

make_heap(_First, _Last, _Cmp)

在堆中添加元素:

push_heap(_First, _Last, _Cmp)

要先添加元素,再調用函數。

在堆中刪除元素:

pop_heap(_First, _Last, _Cmp)

要先調用函數,再刪除(不刪也可以,只要保證不會出現記憶體流失或者其它bug)。

堆排序:

sort_heap(_First, _Last, _Cmp)

排完序,就像普通的sort一樣了,變成有序數組了。不再具有堆的性質。

咚咚咚,代碼以後再貼

【演算法學習】老演算法,新姿勢,STL——Heap

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.