logo

C++ の優先キュー

C++ の優先キューは、最も優先度の高い要素のみを考慮する STL の派生コンテナです。キューは FIFO ポリシーに従い、優先キューは優先度に基づいて要素をポップします。つまり、最も優先度の高い要素が最初にポップされます。

特定の点では通常のキューと似ていますが、次の点で異なります。

  • 優先キューでは、キュー内のすべての要素が何らかの優先順位に関連付けられますが、優先順位はキューのデータ構造には存在しません。
  • 優先キュー内の最も高い優先順位を持つ要素が最初に削除され、キューはその後に続きます。 FIFO(先入れ先出し) ポリシーは、最初に挿入された要素が最初に削除されることを意味します。
  • 同じ優先度を持つ要素が複数存在する場合、キュー内の要素の順序が考慮されます。

注: 優先キューは、最も高い優先順位を持つ要素が最初に優先キューから削除される点を除いて、通常のキューの拡張バージョンです。

プライオリティキューの構文

 priority_queue variable_name; 

簡単な例を通してプライオリティ キューを理解しましょう。

C++ の優先キュー

上の図では、push() 関数を使用して要素を挿入しています。挿入操作は通常のキューと同じです。ただし、pop() 関数を使用してキューから要素を削除すると、最も優先度の高い要素が最初に削除されます。

プライオリティキューのメンバ関数

関数 説明
押す() 新しい要素を優先キューに挿入します。
ポップ() 最も高い優先度を持つ先頭の要素をキューから削除します。
上() この関数は、優先キューの最上位の要素をアドレス指定するために使用されます。
サイズ() 優先キューのサイズを決定します。
空の() キューが空かどうかを確認します。検証に基づいてステータスを返します。
スワップ() 優先キューの要素を、同じタイプとサイズを持つ別のキューと交換します。
位置() 新しい要素を優先キューの先頭に挿入します。

プライオリティキューの簡単なプログラムを作成してみましょう。

 #include #include using namespace std; int main() { priority_queue p; // variable declaration. p.push(10); // inserting 10 in a queue, top=10 p.push(30); // inserting 30 in a queue, top=30 p.push(20); // inserting 20 in a queue, top=20 cout&lt;<'number of elements available in 'p' :'<<p>In the above code, we have created a priority queue in which we insert three elements, i.e., 10, 30, 20. After inserting the elements, we display all the elements of a priority queue by using a while loop.<p></p> <p> <strong>Output</strong> </p> <pre> Number of elements available in &apos;p&apos; :3 30 20 10 zzzzz/ </pre> <p> <strong>Let&apos;s see another example of a priority queue.</strong> </p> <pre> #include #include using namespace std; int main() { priority_queue p; // priority queue declaration priority_queue q; // priority queue declaration p.push(1); // inserting element &apos;1&apos; in p. p.push(2); // inserting element &apos;2&apos; in p. p.push(3); // inserting element &apos;3&apos; in p. p.push(4); // inserting element &apos;4&apos; in p. q.push(5); // inserting element &apos;5&apos; in q. q.push(6); // inserting element &apos;6&apos; in q. q.push(7); // inserting element &apos;7&apos; in q. q.push(8); // inserting element &apos;8&apos; in q. p.swap(q); std::cout &lt;&lt; &apos;Elements of p are : &apos; &lt;&lt; std::endl; while(!p.empty()) { std::cout &lt;&lt; p.top() &lt;&lt; std::endl; p.pop(); } std::cout &lt;&lt; &apos;Elements of q are :&apos; &lt;&lt; std::endl; while(!q.empty()) { std::cout &lt;&lt; q.top() &lt;&lt; std::endl; q.pop(); } return 0; } </pre> <p>In the above code, we have declared two priority queues, i.e., p and q. We inserted four elements in &apos;p&apos; priority queue and four in &apos;q&apos; priority queue. After inserting the elements, we swap the elements of &apos;p&apos; queue with &apos;q&apos; queue by using a swap() function.</p> <p> <strong>Output</strong> </p> <pre> Elements of p are : 8 7 6 5 Elements of q are : 4 3 2 1 </pre> <hr></'number>

優先キューの別の例を見てみましょう。

 #include #include using namespace std; int main() { priority_queue p; // priority queue declaration priority_queue q; // priority queue declaration p.push(1); // inserting element &apos;1&apos; in p. p.push(2); // inserting element &apos;2&apos; in p. p.push(3); // inserting element &apos;3&apos; in p. p.push(4); // inserting element &apos;4&apos; in p. q.push(5); // inserting element &apos;5&apos; in q. q.push(6); // inserting element &apos;6&apos; in q. q.push(7); // inserting element &apos;7&apos; in q. q.push(8); // inserting element &apos;8&apos; in q. p.swap(q); std::cout &lt;&lt; &apos;Elements of p are : &apos; &lt;&lt; std::endl; while(!p.empty()) { std::cout &lt;&lt; p.top() &lt;&lt; std::endl; p.pop(); } std::cout &lt;&lt; &apos;Elements of q are :&apos; &lt;&lt; std::endl; while(!q.empty()) { std::cout &lt;&lt; q.top() &lt;&lt; std::endl; q.pop(); } return 0; } 

上記のコードでは、2 つの優先キュー、つまり p と q を宣言しました。 「p」優先キューに 4 つの要素を挿入し、「q」優先キューに 4 つの要素を挿入しました。要素を挿入した後、swap() 関数を使用して、「p」キューの要素を「q」キューと交換します。

出力

 Elements of p are : 8 7 6 5 Elements of q are : 4 3 2 1