STL 優先隊列 (堆)
阿新 • • 發佈:2018-05-26
復雜度 優先 入隊 數據結構 最小優先隊列 數據 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 優先隊列 (堆)