C ++の詳細なプライオリティキュー

唯一の研究ノートとして、CSDNの記事から転送します。オリジナルリンク:https://blog.csdn.net/weixin_36888577/article/details/79937886

一般的なキューはFIFOのデータ構造であり、キュー要素の端部は、キュー先頭から削除し、追加されます。

プライオリティキューでは、要素が優先されます。要素にアクセスする場合、最も高い優先順位を持つ要素を削除することが最初です。最も先進的な、最初のアウトでプライオリティキュー行動特性(最初のうち最も大きい、中)。

ヘッダファイルをインクルードする最初は#include<queue>、彼とqueue異なるが、我々は、データの場所優先順位をカスタマイズすることができるということであるように、チームから優先順位の前で待ち行列で優先順位が高いです。

キュープライオリティキューはキューの基本的な動作を含むすべてのプロパティを、持っているが、これは、本質的に実施し、スタックである内部に基づいて並べ替えを追加します。

キューと同じ基本的な操作:

1.topアクセスヘッド素子は、
キューが空の場合2.empty 
キュー内の要素の数を返す3.size 
4.push要素はテール(および注文)に挿入される
5.emplace構成要素とその場でキューを挿入
ヘッド素子ポップ6.pop 
7.swap交換内容を

定義:PRIORITY_QUEUE <、コンテナは、機能タイプ>
タイプは、データタイプである、容器のタイプは、コンテナ(例えばベクター、両端キュー等として実現されなければならないコンテナ容器のアレイが、list.STLベクター内で使用されるデフォルトを使用することができない)であり、機能的には、比較の方法です。

のみ使用する必要がある場合は、カスタムデータ型は、基本データ型、のみ着信データ型を使用して、これらの3つのパラメータを渡す必要があり、デフォルトではトップの大きなヒープです。
一般的には:

// 昇順キュー 
ザ・PRIORITY_QUEUE < int型、ベクトル< int型 >、グレーター< int型 >> Q;
 // 降順キュー 
PRIORITY_QUEUE < int型、ベクトル< int型 >、あまり< int型 >> Q; 

// 大と少ないが2つのSTDを達成していますファンクタ(つまり、その実装)(クラスの演算子で達成された機能のように見えるクラスを使用することで、このクラスの振る舞いは、同様の機能を持っている、ファンクタクラスAです)
#include <iostreamの> 
する#include <キュー>
 使用して 名前空間STD;
 int型のmain()
{ 
    // 基本型のデフォルトヒープの大きなトップ 
    PRIORITY_QUEUE < INT > A; 
     // 等価PRIORITY_QUEUE <整数、ベクトル<整数> 、以下< INT >> A; 
    
    //が      存在スペースであるか、右シフト演算↓↓にならなければならない 
    PRIORITY_QUEUE < INT、ベクトル< INT >、大< INT >> C;   // これは小さなトップスタックである 
    PRIORITY_QUEUE < ストリング > B ; 

    のためのINT I = 0 ;私は< 5I ++ )
    { 
        a.push(I)。
        c.push(I); 
    } 
    ながら(!a.empty())
    { 
        COUT << a.top()<< '  ' 
        a.pop(); 
    } 
    COUT << ENDL。

    しばらく(!c.empty())
    { 
        coutの << c.top()<< '  ' ; 
        c.pop(); 
    } 
    COUT << ENDL。

    b.push(" ABC " ); 
    b.push(" ABCD " ); CBD " )。
    しばらく(!b.empty())
    { 
        coutの << b.top()<< '  ' ; 
        b.pop(); 
    } 
    COUT << ENDL。
    リターン 0 ; 
}

図2に示すように、プライオリティキュー要素対の例で作られました。

ルールは:対、最初の要素の最初の比較、第比較的等しい第2を比較します。

書式#include <iostreamの> 
の#include <キュー> 
の#include <ベクトル>
 使用して 名前空間はstdを、
INT ()は、メイン
{ 
    PRIORITY_QUEUE <ペア< INTINT >>  < INTINT > B(12 )。 < INTINT > C(13 )。 < INTINT > D(25 )。 
    a.push(D)。
    a.push(C); 
    a.push(B)。
    一方、(!a.empty())
    { 
        COUT。<< a.top()最初<< '  ' << a.top()は、第2 <<。' \ nを' 
        a.pop(); 
    } 
}

3、カスタム型で作られたプライオリティキューエレメントの例

#include <iostreamの> 
する#include <キュー>
 使用して 名前空間STD; 

// 方法1。
構造体 TMP1 // オーバーロード演算子< 
{
     int型X; 
    TMP1(INT A){X = A;}
     BOOLの 演算子 <(CONST TMP1 A&)のconst 
    { 
        戻り ; X <AX // 大スタックトップを
    } 
}; 

// 方法2 
構造体 TMP2 // オーバーライドファンクタ
{
     BOOLの 演算子()(TMP1 A、B TMP1)
    { 
        リターン斧<BX。// 大顶堆
    } 
}。

INT メイン()
{ 
    TMP1(1 )。
    TMP1のB(2 )。
    TMP1のC(3 )。
    PRIORITY_QUEUE <TMP1> D; 
    d.push(B)。
    d.push(C); 
    d.push(A)。
    一方、(!d.empty())
    { 
        COUT。<< d.top()は、x << ' の\ n ' ; 
        d.pop(); 
    } 
    COUT << ENDL。

    PRIORITY_QUEUE <TMP1、ベクトル<TMP1>、TMP2> F。 
    f.push(B)。
    f.push(C); 
    f.push(A)。
    一方、(!f.empty())
    { 
        COUT。<< f.top()は、x << ' の\ n ' ; 
        f.pop(); 
    } 
}

 

おすすめ

転載: www.cnblogs.com/zhudingtop/p/11373463.html