C++ コンテナ アダプタ - 優先キュー (priority_queue)

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

おすすめ

転載: blog.csdn.net/shouhu010/article/details/129928000