優先佇列 priority queue 的用法

2021-07-02 01:08:49 字數 2409 閱讀 5936

priority_queue呼叫 stl裡面的 make_heap(), pop_heap(), push_heap() 演算法實現,也算是堆的另外一種形式。先寫乙個用 stl 裡面堆演算法實現的與真正的stl裡面的 priority_queue用法相似的priority_queue, 以加深對 priority_queue 的理解

#include #include #include using namespace std;

class priority_queue

void pop()

int top()

int size()

bool empty() }; 

int main()

return 0;

}

stl裡面的 priority_queue 寫法與此相似,只是增加了模板及相關的迭代器什麼的。 

priority_queue 對於基本型別的使用方法相對簡單。他的模板宣告帶有三個引數:

priority_queue

其中type 為資料型別, container 為儲存資料的容器,functional 為元素比較方式。

container 必須是用陣列實現的容器,比如 vector, deque 但不能用 list.

stl裡面預設用的是 vector. 比較方式預設用 operator< , 所以如果你把後面倆個

引數預設的話,

優先佇列就是大頂堆,隊頭元素最大。

示例:將元素5,3,2,4,6依次push到優先佇列中,print其輸出。

1. 標準庫預設使用元素型別的《操作符來確定它們之間的優先順序關係。

priority_queue pq;
通過《操作符可知在整數中元素大的優先順序高。

故示例1中輸出結果為: 6 5 4 3 2

2. 資料越小,優先順序越高

priority_queue, greater >pq;
其中

第二個引數為容器型別。

第二個引數為比較函式。

故示例2中輸出結果為:2 3 4 5 6

3. 自定義優先順序,過載比較符號

過載預設的 < 符號

struct node

int priority;

int value;

};

這時,需要為每個元素自定義乙個優先順序。

注:過載》號會編譯出錯,因為標準庫預設使用元素型別的《操作符來確定它們之間的優先順序關係。

而且自定義型別的《操作符與》操作符並無直接聯絡

**:

1 #include2 #include3 #include4

using namespace stdnamespace std;

5struct node

6 11

int priority;

12int value;

13 };

14int main()

15 ;

19//

示例120 priority_queue qi;

21for(i = 0; i < len; i++)

22 qi.push(a[i]);

23for(i = 0; i < len; i++)

24

28 cout<29

//示例2

30 priority_queue, greater >qi2;

31for(i = 0; i < len; i++)

32 qi2.push(a[i]);

33for(i = 0; i < len; i++)

34

38 cout<39

//示例3

40 priority_queueqn;

41 node b[len];

42 b[0].priority = 6; b[0].value = 1;

43 b[1].priority = 9; b[1].value = 5;

44 b[2].priority = 2; b[2].value = 3;

45 b[3].priority = 8; b[3].value = 2;

46 b[4].priority = 1; b[4].value = 4;

4748

for(i = 0; i < len; i++)

49 qn.push(b[i]);

50 cout<

優先順序"

<

<

<51

for(i = 0; i < len; i++)

52

56return

0;57 }

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...