目錄
前言
一、基本知識
二、使用
前言
priority_queue是在queue庫里的,所以使用的時候要包含queue頭文件。使用方法和堆類似,因為它的底層其實就是大根堆。
一、基本知識
優先隊列
優先級隊列是一種容器適配器,根據一些嚴格的弱排序標準,專門設計為它的第一個元素始終是它所包含的元素中最大的一個。
此上下文類似于堆,可以隨時插入元素,并且只能檢索最大堆元素(優先級隊列中頂部的元素)。
優先級隊列作為容器適配器實現,容器適配器是使用特定容器類的封裝對象作為其底層容器的類,提供一組特定的成員函數來訪問其元素。元素從特定容器的“背面”彈出,這稱為優先級隊列的頂部。
二、使用
優先級隊列默認使用vector作為其底層存儲數據的容器,在vector上又使用了堆算法將vector中元素構造成堆的結構,因此priority_queue就是堆,所有需要用到堆的位置,都可以考慮使用priority_queue。注意:默認情況下priority_queue是大堆。
函數聲明 | 接口說明 |
priority_queue()/priority_queue(first, last) | 構造一個空的優先級隊列 |
empty( ) | 檢測優先級隊列是否為空,是返回true,否則返回false |
top( ) | 返回優先級隊列中最大(最小元素),即堆頂元素 |
push(x) | 在優先級隊列中插入元素x |
pop() | 刪除優先級隊列中最大(最小)元素,即堆頂元素 |
使用方法很簡單,一段代碼快速掌握:
#include<iostream>
#include<queue>
using namespace std;
int main()
{priority_queue<int> vv;//初始化vv.push(4);//壓入數據vv.push(2);vv.push(1);vv.push(3);while (!vv.empty())//檢查是否為空{cout << vv.top() << " ";//訪問數據vv.pop();//彈出數據}cout << endl;//如果是要小的優先級高的話priority_queue<int, vector<int>, greater<int>> aa;aa.push(4);aa.push(2);aa.push(1);aa.push(3);while (!aa.empty()){cout << aa.top() << " ";aa.pop();}cout << endl;return 0;
}
可以運行一下看看結果是什么?