priority queue的常見用法

2021-08-25 22:38:36 字數 1080 閱讀 9339

其底層是用堆來進行實現的

在優先佇列中,隊首元素一定是當前佇列中優先順序最高的那乙個

當然,可以在任何時候往優先佇列裡面加入push元素

而優先佇列底層的資料結構堆(heap)會隨時調整結構

使得每次的隊首元素都是優先順序最大的

1、定義

priority_queuename;

2、容器內元素的訪問

和佇列不一樣的是,優先佇列沒有front()函式與back函式

只能通過top()函式來訪問隊首元素

(也可以稱為堆頂元素)

也就是優先順序最高的元素

3、常用函式

①push(x)

②top()

可以獲得隊首元素

③pop()

④empty()

⑤size()

4、容器內元素優先順序的設定

①基本資料型別的優先順序設定

優先順序對它們的設定一般都是數字大的優先順序越高

因此隊首元素就是優先佇列內元素最大的那個

(char就是字典序最大)

對於基本資料型別來說

下面兩種優先佇列的定義是等價的(以int型為例)

priority_queueq;

priority_queue, less>q;(把元素最小的元素放在隊首)

vector填寫的是承載底層資料堆heap的容器

less是對第乙個引數(int)的比較類

【注意】

less表示數字大的優先順序越大

而greater表示數字小的優先順序越大

②結構體的優先順序設定

過載是指對已有運算子進行重新定義

因為優先佇列本身預設的規則就是優先順序高的放在隊首

因此把小於號過載為大於號就是把規則反向一下

【注意】

如果結構體內的資料較為龐大

(例如出現了字串或者陣列)

建議使用引用來提高效率

此時比較類的引數需要加上「const」和「&」

5、常見用途

可以解決一些貪心問題

也可以對dijksta演算法進行優化

(因為優先佇列的本質是堆)

知識點來自於《演算法筆記》

C STL的priority queue用法總結

翻了很多部落格的總結 1 標頭檔案 include 2 定義 cpp view plain copy priority queue int p 3 優先輸出大資料 priority queue type為資料型別,container為儲存資料的容器,functional為元素比較方式。如果不寫後兩個...

PriorityQueue實現原理

priorityqueue priorityqueue是個基於優先順序堆的極大優先順序佇列 此佇列按照在構造時所指定的順序對元素排序,既可以根據元素的自然順序來指定排序 參閱 comparable 也可以根據 comparator 來指定 這取決於使用哪種構造方法。優先順序佇列不允許 null 元素...

priority queue 優先佇列)

佇列 先輸入先輸出 優先佇列使用方法 標頭檔案 include using namespace std 宣告方法 1.普通方法 priority queueq 下劃線不可漏,預設從大到小輸出隊 2.結構體宣告方式 struct node int x,y frinend bool operator n...