唯一の研究ノートとして、CSDNの記事から転送します。オリジナルリンク:https://blog.csdn.net/weixin_36888577/article/details/79937886
一般的なキューはFIFOのデータ構造であり、キュー要素の端部は、キュー先頭から削除し、追加されます。
プライオリティキューでは、要素が優先されます。要素にアクセスする場合、最も高い優先順位を持つ要素を削除することが最初です。最も先進的な、最初のアウトでプライオリティキュー行動特性(最初のうち最も大きい、中)。
ヘッダファイルをインクルードする最初は#include<queue>
、彼とqueue
異なるが、我々は、データの場所優先順位をカスタマイズすることができるということであるように、チームから優先順位の前で待ち行列で優先順位が高いです。
キュープライオリティキューはキューの基本的な動作を含むすべてのプロパティを、持っているが、これは、本質的に実施し、スタックである内部に基づいて並べ替えを追加します。
キューと同じ基本的な操作:
- トップアクセスヘッド素子
- 空のキューが空であるかどうか
- キューサイズの要素の数を返します。
- 押し要素は、尾に挿入されます(発注)
- コンフィギュレーションの場所を据え付けると、キュー要素に挿入
- ポップヘッド素子をポップ
- スワップ交換内容
定義:PRIORITY_QUEUE <、コンテナは、機能タイプ>
タイプは、データタイプである、容器のタイプは、コンテナ(例えばベクター、両端キュー等として実現されなければならないコンテナ容器のアレイが、list.STLベクター内で使用されるデフォルトを使用することができない)であり、機能的には、比較の方法です。
のみ使用する必要がある場合は、カスタムデータ型は、基本データ型、のみ着信データ型を使用して、これらの3つのパラメータを渡す必要があり、デフォルトではトップの大きなヒープです。
一般的には:
1 //昇順キュー 2 PRIORITY_QUEUE <整数、ベクトル<整数>、大<INT >> Q; 3 //降順キュー 4 PRIORITY_QUEUE <整数、ベクトル<整数>以下<INT >> Q; 5 。6 //大きくより少ない2つのファンクタが実装STD(すなわち、そのインプリメンテーション)(クラスオペレータで達成される関数のように見えるクラスの使用であり、このクラスの挙動は同様の機能を有し、ファンクタクラスAです)
1、プライオリティキューの基本的なタイプの例:
22 a.pop()。 23} 24 COUT << ENDL。 25 26ながら(c.empty()!) 27 { 28 COUT << c.top()<< '「。 29 c.pop()。 30} 31 COUT << ENDL。 32 33 b.push( "ABC")。 34 b.push( "ABCD")。 35 b.push( "CBD")。 36一方(b.empty()!) 37 { 38 COUT << b.top()<< '「。 39 b.pop()。 40} 41 COUT << ENDL。 42リターン0; 43}
結果:
1
2
3
4
|
4 3 2 1 0
0 1 2 3 4
cbd abcd abc
请按任意键继续. . .
|
図2に示すように、プライオリティキュー要素対の例で作られました。
ルールは:対、最初の要素の最初の比較、第比較的等しい第2を比較します。
1の#include <iostreamの> 2の#include <キュー> 3の#include <ベクトル> 名前空間STDを使用して4。 5 INT)(メイン 6 { 7 PRIORITY_QUEUE <ペア<整数、整数>>。 8対<整数、整数> B(1、2)。 9対<整数、整数> C(1、3)。 10対<整数、整数> D(2、5); 11 a.push(D)。 12 a.push(C); 13 a.push(B)。 14一方(a.empty()!) 15 { 16 COUT << a.top()最初<< '' << a.top()は、第2 << 'の\ n'。 17 a.pop()。 18} 19}
結果:
1
2
3
4
|
2 5
1 3
1 2
请按任意键继续. . .
|
3、カスタム型で作られたプライオリティキューエレメントの例
#INCLUDE 1 <入出力ストリーム>。 2の#include <キュー> 3を用いて、名前空間STD; 4 。5 //方法1 。6 TMP1構造体//オペレータは<オーバーロード 7 { 8 INT X; 9 TMP1(INT A){A = X;} 10オペレータBOOL <(CONST&TMP1 A)CONST 11 { 12はX <AX戻りある; //大トップスタック 13} 14}; 15 16 //方法2 。17 TMP2構造体//オーバーライドファンクタ 18が{である 。(19 BOOL演算子() TMP1、TMP1 B) 20は{ 21 AX <BX戻りある; //大トップスタック 22である} 23}であり、 24 25のint main()の 26 {で 27 TMP1 A(1); 28 TMP1 B(2); 29 C TMP1( 3)。 30 PRIORITY_QUEUE <TMP1> D。 31 d.push(B)。 32 d.push(C); 33 d.push(A)。 34一方(d.empty()!) 35 { 36 COUT << d.top()は、x << 'の\ n'。 37 d.pop()。 38} 39 COUT << ENDL。 40 41 PRIORITY_QUEUE <TMP1、ベクトル<TMP1>、TMP2> F。 42 f.push(B)。 43 f.push(C); 44 f.push(A)。 45一方(f.empty()!) 46 { 47 COUT << f.top()は、x << 'の\ n'。 48 f.pop()。 49} 50}
結果:
1
2
3
4
5
6
7
8
|
3
2
1
3
2
1
请按任意键继续. . .
|