STL 優先佇列

2021-09-13 12:08:30 字數 2519 閱讀 3296

一、相關定義

優先佇列容器和佇列一樣,只能從隊尾插入元素,從隊首刪除元素。

為什麼能叫優先佇列呢??因為它有乙個特性,就是佇列中最大的元素總是位於隊首,所以出隊時,並不是完全一樣的遵循先進先出的原則來進行的,而是將佇列中最大的元素出隊。這點有點兒類似於給佇列裡元素先進行乙個排序,再按照順序出隊。元素的比較規則預設按照元素值由大到小排序,我們可以過載  "

優先佇列可以用容器vector 或雙向佇列(deque)來實現(特殊情況:list container不能用來實現queue,因為list的迭代器不是任意訪問iterator,而pop中所用到的堆排序時要求randomaccess iterator的!!!):

priority_queue,less>  a1;    //使用遞增less函式物件排序

priority_queue,greater> a2 ;    //使用遞增greater函式物件排序

裡邊還有的函式有:"判空(empty)","大小(size)" , "棧頂元素(top)","入棧(push)","出棧(pop)"等。。。。。

二.基本介紹

基本操作:

empty()      如果隊列為空,則返回為真

pop()         刪除隊頂元素,刪除第乙個元素

push()       新增 乙個元素

size()         返回優先佇列中的元素個數

top()           返回優先佇列的隊頂,即返回優先佇列中具有最高端的元素

標頭檔案:#include

宣告方式:

1、普通方法:

priority_queuea; //通過操作,按照元素從大到小的順序出隊

priority_queue,greater> b; //通過操作,按照元素從小到大的順序出隊

2、自定義優先順序

struct cmp

};priority_queue,cmp> s;

//其中,我們傳入的第二個引數是容器的型別,第三個引數為過載的比較函式

3、結構體宣告方式:

struct node

};

priority_queueq;   //定義方法

// 在該結構體中,y為值,x為優先順序,我們可以通過自定義operator< 來操作元素的優先順序

//我們在過載 「 < 」的過程中,最好不要過載 " > ",可能會出現錯誤

#include#include#include#includeusing namespace std;

//定義結構,使用運算子過載,自定義優先順序1

struct cmp1

};struct cmp2

};struct number2

for(i=0;num1[i].x;i++)

que5.push(num1[i]);

for(i=0;num2[i].x;i++)

que6.push(num2[i]);

printf("採用預設優先關係:\n(priority_queueque;)\n");

printf("queue 0:\n");

while(!que.empty())

puts("");

puts("");

printf("採用結構體自定義優先順序方式一:\n(priority_queue,cmp>que;)\n");

printf("queue 1:\n");

while(!que1.empty())

puts("");

printf("queue 2:\n");

while(!que2.empty())

puts("");

puts("");

printf("採用標頭檔案\"functional\"內定義優先順序:\n(priority_queue,greater/less>que;)\n");

printf("queue 3:\n");

while(!que3.empty())

puts("");

printf("queue 4:\n");

while(!que4.empty())

puts("");

puts("");

printf("採用結構體自定義優先順序方式二:\n(priority_queueque)\n");

printf("queue 5:\n");

while(!que5.empty())

puts("");

printf("queue 6:\n");

while(!que6.empty())

puts("");

return 0;

}

執行結果:

原文

STL 優先佇列

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

優先佇列 stl

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

STL 優先佇列

stl是個很玄學的東西,裡面有一種外掛程式般的操作 優先佇列。主體和佇列差不多,只不過每次push都會把當前的數放在合適的位置。而隊頭就是最大 小 的數。大概可以看成這樣的 queue tail a sort queue 1,queue 1 tail 隊頭最大的優先佇列 priority queue...