優先佇列 Priority Queue 詳解

2021-08-29 02:27:48 字數 1877 閱讀 5736

1、優先佇列是一種特殊的佇列,這種佇列會自動的把佇列裡的數排序(預設從大到小,使用「<」判斷),而且還可以把數按照特定的方法排列!(包括結構體和過載"<")

2、優先佇列的標頭檔案,需要包括:

#includeusing namespace std;
宣告:乙個優先佇列宣告的基本格式是:

priority_queue《結構型別》 佇列名; 

比如:priority_queue i;

priority_queue d;

不過,我們最為常用的是這幾種:

priority_queue q;

//node是乙個結構體

//結構體裡過載了『<』小於符號

priority_queue ,greater> q; // 從小到大排序(陣列)

priority_queue ,less>q;   // 從大到小排序

//不需要#include標頭檔案

//注意後面兩個「>」不要寫在一起,「>>」是右移運算子

1、以乙個名為q的優先隊列為例:

q.size();     //返回q裡元素個數

q.empty();    //返回q是否為空,空則返回1,否則返回0

q.push(k);    //在q的末尾插入k

q.pop();     //刪掉q的第乙個元素

q.top();     //返回q的第乙個元素

q.back();    //返回q的末尾元素

2、優先佇列的特性

自動排序。

怎麼個排法呢? 在這裡介紹一下:

(1)、預設的優先佇列(非結構體結構)

priority_queue q;
簡單操作:

#include#includeusing namespace std;

priority_queue q;

int main()

程式大意就是在這個優先佇列裡依次插入10、8、12、14、6,再輸出。

結果是什麼呢?

14 12 10 8 6

也就是說,它是按從大到小排序的!

(2)、預設的優先佇列(結構體,過載小於)

先看看這個結構體是什麼。

struct node

}

(3)、less和greater優先佇列(多使用這乙個)

還是以int為例,先來宣告:

priority_queue ,less> p;     // 陣列從大到小排序

priority_queue ,greater> q;  // 從小到大排序

code:

#include#includeusing namespace std;

priority_queue ,less> p;

priority_queue ,greater> q;

int a[5]=;

int main()

結果:

less:14 12 10 8 6

greater:6 8 10 12 14

所以,我們可以知道,less是從大到小,greater是從小到大。

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