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.
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<<'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 'p' :3 30 20 10 zzzzz/ </pre> <p> <strong>Let'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 '1' in p. p.push(2); // inserting element '2' in p. p.push(3); // inserting element '3' in p. p.push(4); // inserting element '4' in p. q.push(5); // inserting element '5' in q. q.push(6); // inserting element '6' in q. q.push(7); // inserting element '7' in q. q.push(8); // inserting element '8' in q. p.swap(q); std::cout << 'Elements of p are : ' << std::endl; while(!p.empty()) { std::cout << p.top() << std::endl; p.pop(); } std::cout << 'Elements of q are :' << std::endl; while(!q.empty()) { std::cout << q.top() << 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 'p' priority queue and four in 'q' priority queue. After inserting the elements, we swap the elements of 'p' queue with 'q' 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 '1' in p. p.push(2); // inserting element '2' in p. p.push(3); // inserting element '3' in p. p.push(4); // inserting element '4' in p. q.push(5); // inserting element '5' in q. q.push(6); // inserting element '6' in q. q.push(7); // inserting element '7' in q. q.push(8); // inserting element '8' in q. p.swap(q); std::cout << 'Elements of p are : ' << std::endl; while(!p.empty()) { std::cout << p.top() << std::endl; p.pop(); } std::cout << 'Elements of q are :' << std::endl; while(!q.empty()) { std::cout << q.top() << 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
'number>