1. 程式人生 > >STL 優先隊列 (堆)

STL 優先隊列 (堆)

復雜度 優先 入隊 數據結構 最小優先隊列 數據 borde pty line


關鍵字為priority_queue ( 大根堆 ) 和 priority_queue <int,vector<int>,greater<int>> ( 小根堆 ).

在一些定義了權重的地方這個數據結構是很有用的。

先回顧隊列的定義:隊列(queue)維護了一組對象,進入隊列的對象被放置在尾部,下一個被取出的元素則取自隊列的首部。

priority_queue特別之處在於,允許用戶為隊列中存儲的元素設置優先級。

這種隊列不是直接將新元素放置在隊列尾部,而是放在比它優先級低的元素前面。

標準庫默認使用 < 操作符來確定對象之間的優先級關系,所以如果要使用結構體

,需要重載 < 和 > 操作符

優先隊列有兩種,一種是最大優先隊列;一種是最小優先隊列;每次取自隊列的第一個元素分別是優先級最大和優先級最小的元素。

1) 優先隊列的定義

包含頭文件:

<queue>

關於優先隊列的數據類型,可以使用自定義結構體,使用方法如上文所述.

2) 優先隊列的常用操作

優先級隊列支持的操作

q.empty() 如果隊列為空,則返回true,否則返回false

q.size() 返回隊列中元素的個數

q.pop() 刪除隊首元素,但不返回其值

q.top() 返回具有最高優先級的元素值,但不刪除該元素

q.push(item) 在基於優先級的適當位置插入新元素

其中q.top()為查找操作,在最小優先隊列中搜索優先權最小的元素,在最大優先隊列中搜索優先權最大的元素.

優先隊列插入和刪除元素的復雜度都是 O(lgn).

另外,在優先隊列中,元素可以具有相同的優先權.

部分轉載自 https://www.cnblogs.com/summerRQ/articles/2470130.html

STL 優先隊列 (堆)