1 はじめに
priority_queue (優先キュー) はコンテナ アダプタであり、キューの最初の要素はキュー内で最も高い優先順位である必要があります。要素の挿入と抽出の時間計算量は対数的であるため、(デフォルトで) 最大の要素を一定時間検索できます。
priority_queue は、vector のラッパーです。
ヘッダー ファイルと定義
#include <queue>
template<
class T,
class Container = std::vector<T>,
class Compare = std::less<typename Container::value_type>
> class priority_queue;
2. 初期化
priority_queue は直接初期化をサポートしていません。コピー初期化を使用できます。
例
int main(int argc, char* argv[])
{
std::priority_queue<int32_t> pri_que;
pri_que.emplace(12);
pri_que.emplace(22);
pri_que.emplace(32);
pri_que.push(28);
pri_que.push(18);
std::priority_queue<int32_t> pri_que1 = pri_que;
return 0;
}
3.使用する
方法 | 説明する |
---|---|
演算子= | 代入演算 |
上() | キューの先頭要素を削除せずに返します。 |
空() | priority_queue が空かどうかを判断する |
サイズ() | priority_queue のサイズを返します。 |
押す() | 要素を挿入 |
場所() | 要素の挿入はプッシュより効率的です |
ポップ() | priority_queue キューヘッド要素を削除します |
スワップ() | 2 つの priority_queue の要素を交換します |
例
/*
* @brief: priority_queue
* @compile: g++ -g priority_queue_main.cc -o d -std=c++11
* @author: your name
* @date: 2023/04/03
* @lastEditorDate:
*/
#include <iostream>
#include <queue>
#include <string>
#include <functional>
void printEnd(int32_t n){
for(size_t i =0; i<n;i++) std::cout<<std::endl;}
std::function<void(int32_t)> e = printEnd;
int main(int argc, char* argv[])
{
//operator= swap
//1.元素的插入,内部会进行排序
std::priority_queue<int32_t> pri_que;
pri_que.emplace(12);
pri_que.emplace(22);
pri_que.emplace(32);
pri_que.push(28);
pri_que.push(18);
std::priority_queue<int32_t> pri_que1 = pri_que;
std::cout<<"[pri_que value]";e(1);
//元素删除,删除队列首元素
for(;!pri_que.empty();pri_que.pop())
{
std::cout<<pri_que.top()<<" ";
}
e(2);
//2.队列的大小
pri_que = pri_que1;
std::cout<<"size value is: "<<pri_que.size();e(1);
//3.swap
std::priority_queue<int32_t> pri_que3;
pri_que3.swap(pri_que);
if(pri_que.empty())
{
std::cout<<"empty";
}
else{
std::cout<<"not empty";
}
e(1);
return 0;
}
出力
[pri_que value]
32 28 22 18 12
size value is: 5
empty