優先佇列是一種抽象資料型別(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 優先佇列的常用操作 優先...