剛開始學習演算法不久,一些常用的演算法工具還沒有掌握,真是丟人!
前一段時間用到優先順序佇列時,都是自己手動通過最大堆或者最小堆來寫乙個,容易出錯且耗時。接觸到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 ...