STL優先佇列詳解

2021-07-02 04:48:44 字數 1958 閱讀 6819

優先佇列是一種抽象資料型別(abstract date type,adt),行為和佇列類似,但是先出隊的元素不是先進佇列的元素,而是佇列中優先順序最高的元素。

stl的優先佇列定義在標頭檔案和 (佇列一樣),用"priority_queuepq"來宣告;

最基本的用法

定義priority_queuepq;

操作:

pq.empty() 如果隊列為空返回真

pq.pop() 刪除對頂元素

pq.push() 加入乙個元素

pq.size() 返回優先佇列中擁有的元素個數

pq.top() 返回優先佇列對頂元素

下面我們介紹幾種優先佇列的定義方式:

priority_queuepq 預設的是整數越大,優先順序越高,如果想讓他 整數越小 優先順序越高怎麼辦?

stl中也有模板   「priority_queue,greater>pq」

上面的尖括號內第乙個

引數為入隊元素型別(int),第二個為容器型別(vector),第三個為比較函式(greater)

因此我們也能自定義

priority_queue,cmp1 >pq; 最小值優先

priority_queue,cmp2 >pq2; 最大值優先 (網上有些寫法是錯的,這是筆者測試後的定義方式

cmp1,cmp2 在結構體中實現

struct cmp1  

};

struct cmp2

int priority;

int value;

};

最後奉上筆者的測試**:

#include #include #include //#include using namespace std;

struct cmp1

};

struct cmp2

for(int i=0;i<6;i++)

printf("\n");

printf("最大值優先自定義\n");

priority_queue,cmp2 >pq2;

for(int i=0;i<6;i++)

for(int i=0;i<6;i++)

printf("\n");

printf("最小值優先模板:\n");

priority_queue,greater>pq3;//注意這裡兩個》 >之間有空格否則編譯器會報錯g++

for(int i=0;i<6;i++)

for(int i=0;i<6;i++)

printf("\n");

priority_queue,cmp1 >pq;

printf("最小值優先自定義:\n");

for(int i=0;i<6;i++)

for(int i=0;i<6;i++)

printf("\n");

printf("自定義型別優先順序:\n");

priority_queuepq4;

node b[5];

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

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

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

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

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

for(int i=0;i<5;i++)

printf("優先順序 值\n");

for(int i=0;i<5;i++)

return 0;

}

STL 優先佇列詳解

優先佇列是乙個保證佇列裡元素單調的佇列,我們可以利用它來維護乙個線性結構的單調性。一般的優先佇列 當然需要加標頭檔案 include priority queue greater q 這是從小到大 intmain priority queue less q 這是從大到小 intmain 記住 les...

STL 優先佇列

優先佇列 在優先佇列中,優先順序高的元素先出佇列。標準庫預設使用元素型別的 操作符來確定它們之間的優先順序關係。優先佇列的第一種用法,也是最常用的用法 priority queue qi 通過 操作符可知在整數中元素大的優先順序高。故示例1 中輸出結果為 9 6 5 3 2 第二種方法 在示例1 中...

優先佇列 stl

priority queue預設頂部是最大值 1 優先佇列的定義 包含標頭檔案 queue.h functional.h 可以使用具有預設優先順序的已有資料結構 也可以再定義優先佇列的時候傳入自定義的優先順序比較物件 或者使用自定義物件 資料結構 但是必須過載好 操作符。2 優先佇列的常用操作 優先...