C++ priority_queue優先級隊列容器

優先隊列: 它的入隊順序沒有變化,但是出隊的順序是根據優先級的高低來決定的。優先級高的優先出隊。

  1. 最大值優先級隊列、最小值優先級隊列
  2. 用來開發一些特殊的應用
  3. #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其他容器學習鏈接:

  1. C++ queue隊列容器

  2. C++ map 和 multimap 容器

  3. C++ set 和 multiset 容器

  4. C++ list容器

  5. C++ deque容器

  6. C++ vector容器

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章