優先隊列: 它的入隊順序沒有變化,但是出隊的順序是根據優先級的高低來決定的。優先級高的優先出隊。
- 最大值優先級隊列、最小值優先級隊列
- 用來開發一些特殊的應用
#include <queue>
定義時,如果使用默認的less:值越大,優先級越大;
如果使用greater:值越小,優先級越大。
定義
// 默認情況是使用vector容器作爲元素存儲,less作爲排序依據
priority_queue<int> pq1; // 默認情況下是值越大,優先級越大
priority_queue<int, vector<int>, less<int>> pq2; // 相當於
// 可以自定義
priority_queue<int, deque<int>, greater<int>> pq3; // 值越小,優先級越大
// 注意:不可以使用list容器作爲存儲對象
pq1 = pq2; // 賦值重載
priority_queue<int> pq4 = pq1; // 默認構造
注意:不可以使用list容器作爲存儲對象
// 進隊
pq1.push(1);
// 出隊
pq2.pop();
// 交換兩個隊列的元素
pq1.swap(pq2);
// 獲取隊列中的元素個數
cout << pq2.size() << endl;
// 判斷隊列是否爲空
pq2.empty();
// 獲取隊首的元素
pq2.top();
注意:priority_queue優先級隊列容器沒有迭代器,所以如果想要輸出隊列裏面的所有值,唯有一下方法:
// 如果隊列不爲空,則繼續則行
while (!pq2.empty()) {
// 獲取隊首的元素
cout << pq2.top() << " ";
// 隊首出隊
pq2.pop();
}
cout << endl;
測試代碼:
#include <iostream>
#include <Windows.h>
#include <queue>
#include <vector>
#include <deque>
using namespace std;
int main(void) {
// 默認情況是使用vector容器作爲元素存儲,less作爲排序依據
priority_queue<int> pq1; // 默認情況下是值越大,優先級越大
priority_queue<int, vector<int>, less<int>> pq2; // 相當於
// 可以自定義
priority_queue<int, deque<int>, greater<int>> pq3; // 值越小,優先級越大
// 注意:不可以使用list容器作爲存儲對象
pq1 = pq2; // 賦值重載
priority_queue<int> pq4 = pq1; // 默認構造
// 存儲元素
pq1.push(1);
pq1.push(2);
pq1.push(3);
pq1.push(2);
pq1.push(3);
pq1.push(4);
pq1.push(5);
pq1.push(2);
// 交換兩個隊列的元素
pq1.swap(pq2);
// 獲取隊列中的元素個數
cout << pq2.size() << endl;
// 如果隊列不爲空,則繼續則行
while (!pq2.empty()) {
// 獲取隊首的元素
cout << pq2.top() << " ";
// 隊首出隊
pq2.pop();
}
cout << endl;
system("pause");
return 0;
}
運行截圖:
輸出的是less修飾的隊列,所以 越大的數先出列。
STL其他容器學習鏈接: