優先佇列priority queue

2021-10-03 14:19:30 字數 1988 閱讀 5136

普通佇列是先進先出的資料結構,元素在佇列尾新增,在佇列頭刪除

優先佇列,元素被賦予優先順序。當訪問元素時,具有最高優先順序的元素最先刪除,最先出的特徵(first in,largest out)

包含標頭檔案#include,和queue不同的就在於我們可以自定義其中資料的優先順序,讓優先順序高的排在佇列前面,優先出隊

優先佇列具有佇列的所有特性和基本操作,只是在這基礎上新增了乙個內部排序,本質是乙個堆實現的

和佇列基本操作相同:

定義:priority_queue

type 就是資料型別

container 就是容器型別(container必須是用陣列實現的容器,比如vector,deque等等,但不能用 list;stl裡面預設用的是vector)

functional 就是比較的方式

當需要用自定義的資料型別時才需要傳入這三個引數,使用基本資料型別時,只需要傳入資料型別,預設是小於比較器

一般是:

//公升序佇列,隊頭值最小

priority_queue ,greater> q;

//降序佇列

priority_queue ,less> q; /*

greater和less是std實現的兩個仿函式

(就是使乙個類的使用看上去像乙個函式。其實現就是類中實現乙個operator(),這個類就有了類似函式的行為,就是乙個仿函式類了)

*/

#include #include using namespace std;

int main()

while (!a.empty())

while(!c.empty())

//字串

b.push("abc");

b.push("abcd");

b.push("cbd"); //cbd優先順序最高

while(!b.empty())

cout << endl;

return 0;

}

執行結果:

4 3 2 1 0

0 1 2 3 4

cbd abcd abc

規則:pair的比較,先比較第乙個元素,第乙個相等比較第二個

#include #include #include using namespace std;

int main()

}

執行結果:

2  5

1  3

1  2

#include #include using namespace std;

//方法1

struct tmp1

bool operator<(const tmp1& a)

};//方法2

struct tmp2 // 重寫仿函式

};int main()

cout << endl;

priority_queue, tmp2> f;

f.push(b);

f.push(c);

f.push(a);

while(!f.empty())

}

執行結果:

3  2  1

3  2  1

STL容器 優先佇列priority queue

priority queue顧名思義,是乙個具有權值概念的queue,它和queue一樣允許加入新元素 移除舊元素等功能。由於這是乙個queue,所以只允許在底部加入元素,從頂部取出元素。但優先佇列帶有權值概念,其內的元素自動按照元素的權值排序。權值最高者排在最前面。stl的priority que...

STL初步 優先佇列Priority queue

這個優先到底是如何優先?和普通佇列區別在哪?priority queue type,container,functional priority queue,less q priority queue,less a q priority queue,less b 優先佇列中沒有迭代器 也沒有clear...

優先順序佇列用法詳解(priority queue)

由於優先順序佇列的內部資料結構為堆,所以這裡先介紹堆的一些操作。堆的一些函式操作在algorithm標頭檔案中 在 first,last 範圍內 構造最大堆,first,last 可以是vector指標也可以是陣列指標 make heap first last make heap first las...