C ++で優先キューを実装する方法



この記事では、例を使用して、C ++で優先キューを実装する方法に関する詳細で包括的な知識を提供します。

優先キューはSTLのコンテナです。優先度キューの各要素に特定の優先度があり、優先度キューから要素をポップすると、優先度が最も高い要素が最初にポップされるという点を除いて、キューと同様です。優先キューと同様に、10種類のコンテナがあります STL 。コンテナは、データを格納するオブジェクトです。 STLコンテナは、テンプレートクラスを使用して実装されるため、さまざまなタイプのデータを保持するようにカスタマイズするのは簡単です。この投稿では、優先度付きキューとそれに関連する概念について詳しく説明します。以下のポインタは、C ++のこの優先キューの記事で取り上げられます。

C ++の優先度付きキューに関するこの記事に進みます





STLのコンポーネント

STLは、データを格納および処理するための標準的なアプローチとして使用できるテンプレートクラスと関数で構成されています。 STLのコンポーネントについて説明しましょう

コンテナ- STLで定義されているコンテナには10種類あり、これらは3つのカテゴリに分類されます。これらの3つのうち、優先キューは派生コンテナのカテゴリに属します。各コンテナクラスには、データの操作に使用できる独自の関数セットがあります。



アルゴリズム –アルゴリズムは、コンテナオブジェクトに存在するデータを処理するために使用されるメソッドです。 STLは、初期化、検索、ソート、マージ、コピーに使用できるさまざまなタイプのアルゴリズムを提供します。アルゴリズムは、テンプレート関数を使用して実装されます。

イテレータ- イテレータは、コンテナ内の要素を指すオブジェクトです。イテレータは、コンテナの内容を移動する際に使用できます。イテレータは、インクリメントおよびデクリメントできるポインタのようなものです。これは、アルゴリズムとコンテナーの間のリンクとして機能します。イテレータは、コンテナに格納されているデータを操作するために使用されます。

C ++の優先度付きキューに関するこの記事に進みます



ヒープと優先度付きキュー

前に見たように、優先度付きキューは派生コンテナのカテゴリに属します。このカテゴリの他のメンバーは、スタックとキューです。これらの派生コンテナーは、コンテナーアダプターとも呼ばれます。

スタック、キュー、および優先キューは、異なるシーケンスコンテナーから作成されるため、派生コンテナーと呼ばれます。これらのコンテナは、データ操作に使用されないタイプのイテレータをサポートしていません。

優先キューとは正確には何ですか?

簡単に言えば、データを格納するために使用したコンテナです。保存されたデータの各要素には、論理的な順序でデータを保存するのに役立つ優先順位が割り当てられます。
構文:priority_queue variable_name

優先キューを使用するには、プログラムにヘッダーファイルをインクルードすることが重要です。

C ++の優先キューたとえば、push関数を使用して優先キューに2、10、30、5、6を追加し、pop関数を使用して要素をポップすると、出力は30、10、6、5、2になります。

さて、これで優先キューの目的または使用法がわかりました。しかし、30> 10かどうかはどうやってわかりましたか?なんらかの仕分けをしているのでしょうか?この時点で、ヒープが登場します。ヒープの詳細については、この記事を参照してください。

ヒープ-ヒープは木のような構造です。子要素ノードが親ノードに対してヒープ内にどのように配置されているかに基づいて、ヒープは2つの部分に分割されます。

1。 最小ヒープ- 最小ヒープでは、親ノードの値は子ノードの値以下です。

2.2。 最大ヒープ- 最大ヒープでは、親ノードの値が子ノードの値以上です。

注意- 優先度付きキューは、何らかの並べ替えアルゴリズムを使用して要素を並べ替えるのではなく、データをヒープの形式で保存します。

C ++の優先度付きキューに関するこの記事に進みます

優先キューのすべての要素を印刷する

優先度付きキューの基本を理解した後、優先度付きキューで最も一般的に使用される方法を理解するためのプログラムを実装しましょう

#include #include using namespace std int main(){priority_queue Prior_q Prior_q.push(10)Prior_q.push(30)Prior_q.push(6)Prior_q.push(2)Prior_q.push(15)Prior_q.push(9) Prior_q.push(7)while(Prior_q.empty()== false){cout<< Prior_q.top() << ' ' Prior_q.pop() } return 0 }

出力:

30 15 10 9 6 2

上記のプログラムでは、優先度付きキューを処理するときにほとんどの場合に使用されるpop()、top()、およびpush()関数を使用しました。優先度付きキューで使用できるいくつかの方法を見てみましょう

size(): この関数は、優先度付きキューのサイズを返します

空の( ): この関数は、優先キューが空かどうかを確認するために使用されます。優先キューが空の場合はtrueを返します。

押す( ): 優先度付きキューに要素を挿入します。

ジャストインタイムコンパイラjava

ポップ (): この関数は、優先度が最も高い要素である優先度キューの最上位要素を削除します。

swap(): この関数は、優先キューの要素を別の優先キューと交換します。この関数は、パラメーターとして優先キューを取ります。

emplace(): この関数は、優先度付きキューの先頭に要素を追加するために使用されていました。

もう1つのプログラムを見てみましょう。

#include #include using namespace std int main(){priority_queue Prior_q Prior_q.push(10)Prior_q.push(30)Prior_q.push(6)Prior_q.push(2)Prior_q.push(15)Prior_q.push(9) Prior_q.push(7)while(Prior_q.empty()== false){cout<< Prior_q.top() << ' ' Prior_q.pop() } return 0 }

出力:

2 6 7 9 10 15 30

これで、C ++のこの優先度付きキューの記事は終わりです。詳細を知りたい場合は、 信頼できるオンライン学習会社であるEdurekaによる。 EdurekaのJavaJ2EEおよびSOAトレーニングおよび認定コースは、Hibernate&SpringなどのさまざまなJavaフレームワークに加えて、コアJavaコンセプトと高度なJavaコンセプトの両方についてトレーニングするように設計されています。

質問がありますか?このブログのコメントセクションでそれについて言及してください。できるだけ早くご連絡いたします。