普通的佇列是一種先進先出的資料結構,元素在佇列尾追加,而從佇列頭刪除。
在優先佇列中,元素被賦予優先順序。當訪問元素時,具有最高優先順序的元素最先刪除。優先佇列具有最高端先出 (first in, largest out)的行為特徵。
首先要包含標頭檔案#include
, 他和queue
不同的就在於我們可以自定義其中資料的優先順序, 讓優先順序高的排在佇列前面,優先出隊。
優先佇列具有佇列的所有特性,包括佇列的基本操作,只是在這基礎上新增了內部的乙個排序,它本質是乙個堆實現的。
和佇列基本操作相同:定義:priority_queue
type 就是資料型別,container 就是容器型別(container必須是用陣列實現的容器,比如vector,deque等等,但不能用 list。stl裡面預設用的是vector),functional 就是比較的方式。
當需要用自定義的資料型別時才需要傳入這三個引數,使用基本資料型別時,只需要傳入資料型別,預設是大頂堆。
一般是:
1 //公升序佇列1、基本型別優先佇列的例子:2 priority_queue ,greater> q;
3 //降序佇列
4 priority_queue ,less>q;
5 6 //greater和less是std實現的兩個仿函式(就是使乙個類的使用看上去像乙個函式。其實現就是類中實現乙個operator(),這個類就有了類似函式的行為,就是乙個仿函式類了)
1 #include2 #include 3 using namespace std;執行結果:124 int main()
5 19 while (!a.empty())
20
24 cout << endl;
25 26 while (!c.empty())
27
31 cout << endl;
32 33 b.push("abc");
34 b.push("abcd");
35 b.push("cbd");
36 while (!b.empty())
37
41 cout << endl;
42 return 0;
43 }
344 3 2 1 0
0 1 2 3 4
cbd abcd abc
請按任意鍵繼續. . .
2、用pair做優先佇列元素的例子:
規則:pair的比較,先比較第乙個元素,第乙個相等比較第二個。
1 #include 2 #include 3 #include 4 using namespace std;執行結果:125 int main()
6 19 }
342 5
1 3
1 2
請按任意鍵繼續. . .
3、用自定義型別做優先佇列元素的例子
1 #include 2 #include 3 using namespace std;執行結果:124 5 //方法1
6 struct tmp1 //運算子過載<
7 10 bool operator
11
14 };
15 16 //方法2
17 struct tmp2 //重寫仿函式
18 23 };
24 25 int main()
26 39 cout << endl;
40 41 priority_queue, tmp2> f;
42 f.push(b);
43 f.push(c);
44 f.push(a);
45 while (!f.empty())
46
50 }
3456
783
2
1
3
2
1
請按任意鍵繼續. . .
PriorityQueue使用介紹
這玩意兒叫優先順序佇列,是乙個類,繼承了abstractqueue類,實現了serializable介面。jdk文件裡是這麼描述這玩意的 基於優先順序堆的無限優先順序queue 優先順序佇列的元素根據它們的有序natural ordering 或由乙個comparator在佇列構造的時候提供,這取決...
C 使用priority queue方法
優先佇列是一種容器介面卡,根據一種嚴格的排序標準,它的第乙個元素一般是在它所包含的元素中最大的。這種情況類似於乙個堆,元素可以隨時插入,只能堆中最大的元素才能被檢索到 那個在優先佇列頂部的元素 優先佇列是作為容器介面卡,實現使用乙個特定的容器類的封裝物件作為它的底層容器,提供一組特定的成員函式來訪問...
priority queue使用方法
優先佇列是一種容器介面卡 容器介面卡的概念本人不會解釋,故此處無法作出說明 它的第乙個元素 位於頭部top 總是佇列中最大的元素,這裡的 最大 是指佇列元素的嚴格弱序中的 最大 嚴格弱序是一系列數或事物按照一定的比較關係 排列得出的序列,可以是數學中進行數值比較的大於,也可以是小於,還可以是其它含義...