logo

Priority Queue C++ nyelven

A prioritási sor a C++ nyelvben egy származtatott tároló az STL-ben, amely csak a legmagasabb prioritású elemet veszi figyelembe. A sor a FIFO-házirendet követi, míg a priority queue a prioritás alapján dobja fel az elemeket, azaz a legmagasabb prioritású elem kerül elő először.

Bizonyos szempontból hasonlít a normál sorhoz, de a következő módokon különbözik:

  • A prioritási sorban a sor minden eleméhez valamilyen prioritás tartozik, de a prioritás nem létezik a sor adatstruktúrájában.
  • A prioritási sorból a legmagasabb prioritású elem kerül eltávolításra először, míg a sor követi a FIFO (First-In-First-Out) A házirend azt jelenti, hogy az elsőként beszúrt elem törlődik először.
  • Ha egynél több elem létezik azonos prioritással, akkor a rendszer figyelembe veszi az elemek sorrendjét a sorban.

Megjegyzés: A prioritási sor a normál sor kiterjesztett változata, azzal a különbséggel, hogy a legmagasabb prioritású elem kerül először eltávolításra a prioritási sorból.

A prioritási sor szintaxisa

 priority_queue variable_name; 

Ismerjük meg a prioritási sort egy egyszerű példán keresztül.

Priority Queue C++ nyelven

A fenti ábrán az elemeket push() függvénnyel szúrtuk be, és a beszúrási művelet megegyezik a normál sorral. De ha egy pop() függvénnyel töröljük az elemet a sorból, akkor először a legmagasabb prioritású elem törlődik.

A prioritási sor tag funkciója

Funkció Leírás
nyom() Új elemet szúr be egy prioritási sorba.
pop() Eltávolítja a legfelső elemet a sorból, amely a legmagasabb prioritású.
top() Ez a függvény a prioritási sor legfelső elemének megszólítására szolgál.
méret() Meghatározza a prioritási sor méretét.
üres() Ellenőrzi, hogy a sor üres-e vagy sem. Az ellenőrzés alapján visszaadja az állapotot.
csere() Felcseréli egy prioritási sor elemeit egy másik, azonos típusú és méretű sorra.
elhelyezkedés() Új elemet szúr be a prioritási sor tetejére.

Készítsünk egy egyszerű prioritási sor programot.

 #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>

Lássunk egy másik példát a prioritási sorra.

 #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; } 

A fenti kódban két prioritási sort deklaráltunk, azaz a p-t és a q-t. Négy elemet szúrtunk be a 'p' prioritású sorba, és négyet a 'q' prioritási sorba. Az elemek beillesztése után a 'p' queue elemeit felcseréljük a 'q' sorra a swap() függvény segítségével.

Kimenet

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