STL priority queue 優先佇列

2021-06-11 14:52:55 字數 1025 閱讀 4239

剛開始學習演算法不久,一些常用的演算法工具還沒有掌握,真是丟人!

前一段時間用到優先順序佇列時,都是自己手動通過最大堆或者最小堆來寫乙個,容易出錯且耗時。接觸到stl後,開始用map和set模擬乙個優先順序佇列,但是總有一些小問題出現,發現stl功能強大,但我卻幾乎不懂。

今天終於決定使用stl提供的priority_queue,發現還挺好用,雖然很多人都稱他效率不夠高,但是使用起來很方便。下面就總結一下它的一般用法:

模板原型:

priority_queue

t:存放容器的元素型別

sequence:實現優先順序佇列的底層容器,預設是vector

compare:用於實現優先順序的比較函式,預設是functional中的less

常用的操作如下:

empty()  如果優先隊列為空,則返回真 

pop()  刪除第乙個元素 

push()  加入乙個元素 

size()  返回優先佇列中擁有的元素的個數 

top()  返回優先佇列中有最高優先順序的元素

但是在使用時必須注意:priority_queue放置元素時,不會判斷元素是否重複。(因為在模板的第二個引數時順序容器,不能保證元素的唯一性)

此外可以替代預設的compare函式。下面用乙個小例子說明一下:

[cpp]view plain

copy

#include 

#include 

#include 

#include 

using

namespace

std;  

struct

node  

};  

class

cmp   

};  

intmain()  

}  在自己實現compare函式(函式物件)時,函式物件是中的引數如果是const型別,那麼佇列存放的元素(比如node)的比較函式也一定要實現為const。因為函式物件在執行時通過其引數呼叫node的比較函式。

STL priority queue學習筆記

在學習了堆優化的迪傑斯特拉時,學了優先佇列,發現非常好用。qaq之前應該早點學的,哎,自己又菜又懶,鹹魚王無疑了。學習知識點記錄下來!優先佇列就是將佇列中的元素賦予優先順序,在訪問優先佇列中的元素時,具有最高優先順序的元素先被訪問。佇列時先進先出,而優先佇列是優先順序最高的先出。初始化 需要 標頭檔...

STL priority queue 常見用法詳解

演算法筆記 學習筆記 priority queue又稱優先佇列,其底層時用堆來實現的。在優先佇列中,隊首元素一定是當前佇列中優先順序最高的那乙個。桃子 優先順序 3 梨子 優先順序 4 蘋果 優先順序 1 那麼出隊順序是 梨子 4 桃子 3 蘋果 1 可以在任何時候往優先佇列裡面加入 push 元素...

再次學習priority queue優先佇列

這周四導師的演算法課就要考試,真心感覺自己沒學好,在看貪心策略的時候提到了哈夫曼編碼,而哈夫曼編碼是借助優先佇列實現的。對於優先佇列並不熟悉的我,理所當然的應該回顧複習乙個priority queue,也就是優先佇列!下面主要是根據 c 標準程式庫 中的內容整理而得到。class priority ...