C ++中的優(yōu)先隊(duì)列是STL中的派生容器,它僅考慮最高優(yōu)先級(jí)元素。隊(duì)列遵循FIFO策略,而優(yōu)先隊(duì)列根據(jù)優(yōu)先級(jí)彈出元素,即,優(yōu)先級(jí)最高的元素首先彈出。
它在某些方面類似于普通隊(duì)列,但在以下方面有所不同:
在優(yōu)先隊(duì)列中,隊(duì)列中的每個(gè)元素都與某個(gè)優(yōu)先級(jí)相關(guān)聯(lián),但是優(yōu)先級(jí)在隊(duì)列數(shù)據(jù)結(jié)構(gòu)中不存在。
優(yōu)先隊(duì)列中具有最高優(yōu)先級(jí)的元素將被首先刪除,而隊(duì)列遵循FIFO(先進(jìn)先出)策略,這意味著先插入的元素將被首先刪除。
如果存在多個(gè)具有相同優(yōu)先級(jí)的元素,則將考慮該元素在隊(duì)列中的順序。
priority_queue<int> variable_name;
讓我們通過(guò)一個(gè)簡(jiǎn)單的示例了解優(yōu)先隊(duì)列。
在上圖中,我們通過(guò)使用push()函數(shù)插入了元素,并且插入操作與普通隊(duì)列相同。但是,當(dāng)我們使用pop()函數(shù)從隊(duì)列中刪除元素時(shí),優(yōu)先級(jí)最高的元素將首先被刪除。
函數(shù) | 描述 |
---|---|
push() | 它將新元素插入優(yōu)先隊(duì)列。 |
pop() | 它將優(yōu)先級(jí)最高的元素從隊(duì)列中刪除。 |
top() | 此函數(shù)用于尋址優(yōu)先隊(duì)列的最頂層元素。 |
size() | 返回優(yōu)先隊(duì)列的大小。 |
empty() | 它驗(yàn)證隊(duì)列是否為空?;隍?yàn)證,它返回隊(duì)列的狀態(tài)。 |
swap() | 它將優(yōu)先隊(duì)列的元素與具有相同類型和大小的另一個(gè)隊(duì)列交換。 |
emplace() | 它在優(yōu)先隊(duì)列的頂部插入一個(gè)新元素。 |
讓我們創(chuàng)建一個(gè)簡(jiǎn)單的優(yōu)先隊(duì)列程序。
#include <iostream> #include<queue> using namespace std; int main() { priority_queue<int> p; // 變量聲明. p.push(10); // 插入 10 到隊(duì)列, top=10 p.push(30); // 插入 30 到隊(duì)列, top=30 p.push(20); // 插入 20 到隊(duì)列, top=20 cout<<"可用元素的數(shù)量 到 'p' :"<<p.size()<<endl; while(!p.empty()) { std::cout << p.top() << std::endl; p.pop(); } return 0; }
在上面的代碼中,我們創(chuàng)建了一個(gè)優(yōu)先隊(duì)列,在其中插入三個(gè)元素,即10、30、20。在插入這些元素之后,我們使用while循環(huán)顯示優(yōu)先隊(duì)列的所有元素。
輸出結(jié)果
可用元素的數(shù)量 到 'p' :3 30 20 10
讓我們看看優(yōu)先隊(duì)列的另一個(gè)示例。
#include <iostream> #include<queue> using namespace std; int main() { priority_queue<int> p; //優(yōu)先隊(duì)列聲明 priority_queue<int> q; //優(yōu)先隊(duì)列聲明 p.push(1); // 插入 '1' 到 p. p.push(2); // 插入 '2' 到 p. p.push(3); // 插入 '3' 到 p. p.push(4); // 插入 '4' 到 p. q.push(5); // 插入 '5' 到 q. q.push(6); // 插入 '6' 到 q. q.push(7); // 插入 '7' 到 q. q.push(8); // 插入 '8' 到 q. p.swap(q); std::cout << "p隊(duì)列元素是 : " << std::endl; while(!p.empty()) { std::cout << p.top() << std::endl; p.pop(); } std::cout << "q優(yōu)先隊(duì)列元素是 :" << std::endl; while(!q.empty()) { std::cout << q.top() << std::endl; q.pop(); } return 0; }
在上面的代碼中,我們聲明了兩個(gè)優(yōu)先隊(duì)列,即p和q。我們?cè)凇?p”優(yōu)先隊(duì)列中插入了四個(gè)元素,在“ q”優(yōu)先隊(duì)列中插入了四個(gè)元素。插入元素之后,我們使用swap()函數(shù)將'p'隊(duì)列的元素與'q'隊(duì)列交換。
輸出結(jié)果
p優(yōu)先隊(duì)列元素是 : 8 7 6 5 q優(yōu)先隊(duì)列元素是 : 4 3 2 1