[英]Why does std::priority_queue use max heap instead of min heap?
我一直想知道為什么 STL 優先級隊列默認使用最大堆而不是最小堆。 我想到的兩個明顯用例是尋路 (Dijkstra) 和構建霍夫曼代碼。 兩種算法都需要先拉取最小元素。 由於排序 (std::sort) 默認使用升序,我想知道 priority_queue 背后的設計原因是什么,因為我更喜歡默認情況下的最小堆。
Priority_queue 改編自 make_heap/pop_heap/push_heap/sort_heap。 當您使用 less 進行 make_heap 時,元素按升序排列。 最后一個元素被視為根元素。 所以它是最大堆。 我想有兩個原因:
這是有原因的,但這與 C++ 的互連特性有關。
priority_queue
被設計為一個易於使用的封裝make_heap
、 pop_heap
和push_heap
。 堆函數將最大值保留在前面是有意義的,因為這是您能夠實現sort_heap
,它也使用堆函數。
當然,您始終可以使用greater
而不是less
來實例化priority_queue
以獲得您想要的行為。
在英語中,優先級更高的事情應該先發生。 因此,在優先級隊列中,優先級高的東西應該先被彈出。
基本上你的問題的答案是因為優先級這個詞的定義強烈暗示從大到小排序。
想象一下像醫院大廳這樣的優先隊列。 優先級最高的患者(緊急情況)應該排在治療隊列的最前面。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.