C++ 基礎(chǔ)教程

C++ 流程控制

C++ 函數(shù)

C++ 數(shù)組 & 字符串

C++ 數(shù)據(jù)結(jié)構(gòu)

C++ 類 & 對(duì)象

C++ 指針

C++ 繼承

C++ STL 教程

C++ 參考手冊(cè)

c++ 優(yōu)先隊(duì)列(priority_queue)

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ì)列中的順序。

注意:優(yōu)先隊(duì)列是普通隊(duì)列的擴(kuò)展版本,但優(yōu)先級(jí)最高的元素將首先從優(yōu)先隊(duì)列中刪除。

優(yōu)先隊(duì)列的語(yǔ)法

priority_queue<int> variable_name;

讓我們通過(guò)一個(gè)簡(jiǎn)單的示例了解優(yōu)先隊(duì)列。

C ++中的優(yōu)先隊(duì)列

在上圖中,我們通過(guò)使用push()函數(shù)插入了元素,并且插入操作與普通隊(duì)列相同。但是,當(dāng)我們使用pop()函數(shù)從隊(duì)列中刪除元素時(shí),優(yōu)先級(jí)最高的元素將首先被刪除。

優(yōu)先隊(duì)列的成員函數(shù)

函數(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
丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清