---
tags: STL
title: Priority Queue
---
:::success
# 優先佇列 Priority Queue
## 實現
- std::priority_queue背後是heap
## 用途
- 為一序列容器
- 是一個帶優先級的queue
- 可以==很快很方便的==加入元素或取出當前最優先的元素
## 用法
### 宣告
- 需要引入函式庫\<queue>
```cpp=
#include <queue>
//priority_queue<"dataType", "container", "comparisonFunction"> "name";
//container默認為vector,comparisonFunction默認為由大到小排序
priority_queue<int> test;
priority_queue<int, vector<int>, greater<int> > pq; //由小到大
bool cmp(pair<int, int> a, pair<int, int> b) {
return a.second > b.second;
} //priority_queue優先判定為!cmp,所以這個cmp會使pq中小的優先
priority_queue<pair<int, int>, vector<pair<int, int> >, cmp> pq;
```
### 函式
```cpp=
狀態回傳
priority_queue.empty(); //回傳priority_queue是否為空
priority_queue.size(); //回傳priority_queue目前元素數
加入移除元素
priority_queue.push(e); //將e加入priority_queue
priority_queue.pop(); //移除priority_queue中的第一個元素
操作元素
priority_queue.top(); //呼叫priority_queue中的第一個元素
```
- 插入和移除的複雜度為 $O(logN)$,初始化的複雜度為$O(logN)$(建立heap,若建立後再一個一個push則為$O(NlogN)$)
- 呼叫元素的複雜度為$O(1)$
:::