Prioritetni red u C++ je izvedeni spremnik u STL-u koji uzima u obzir samo element najvišeg prioriteta. Red slijedi FIFO politiku dok prioritetni red izbacuje elemente na temelju prioriteta, tj. prvi se izbacuje element s najvišim prioritetom.
Sličan je običnom redu čekanja u određenim aspektima, ali se razlikuje na sljedeće načine:
- U redu čekanja s prioritetom, svaki element u redu čekanja povezan je s nekim prioritetom, ali prioritet ne postoji u strukturi podataka reda čekanja.
- Element s najvećim prioritetom u redu čekanja prioriteta bit će prvi uklonjen, a red čekanja slijedi FIFO (prvi ušao prvi izašao) pravilo znači da će prvi biti izbrisan element koji je prvi umetnut.
- Ako postoji više od jednog elementa s istim prioritetom, tada će se redoslijed elemenata u redu uzeti u obzir.
Napomena: Prioritetni red čekanja je proširena verzija normalnog reda čekanja osim što će element s najvišim prioritetom biti prvi uklonjen iz prioritetnog reda čekanja.
Sintaksa reda prioriteta
priority_queue variable_name;
Razmotrimo prioritetni red kroz jednostavan primjer.
Na gornjoj ilustraciji umetnuli smo elemente pomoću funkcije push(), a operacija umetanja identična je normalnom redu čekanja. Ali kada izbrišemo element iz reda pomoću funkcije pop(), prvi će biti izbrisan element s najvećim prioritetom.
Članska funkcija prioritetnog reda
Funkcija | Opis |
---|---|
gurnuti() | Umeće novi element u prioritetni red. |
pop() | Uklanja gornji element iz reda čekanja, koji ima najveći prioritet. |
vrh() | Ova se funkcija koristi za adresiranje najvišeg elementa reda prioriteta. |
veličina() | Određuje veličinu prioritetnog reda čekanja. |
prazan() | Provjerava je li red čekanja prazan ili ne. Na temelju provjere vraća status. |
zamijeniti () | Zamjenjuje elemente prioritetnog reda s drugim redom iste vrste i veličine. |
mjesto() | Umeće novi element na vrh prioritetnog reda čekanja. |
Kreirajmo jednostavan program prioritetnog reda.
#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>
Pogledajmo još jedan primjer prioritetnog reda.
#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; }
U gornjem kodu deklarirali smo dva prioritetna reda čekanja, tj. p i q. Umetnuli smo četiri elementa u 'p' prioritetni red i četiri u 'q' prioritetni red. Nakon umetanja elemenata, mijenjamo elemente 'p' reda s 'q' redom pomoću funkcije swap().
Izlaz
Elements of p are : 8 7 6 5 Elements of q are : 4 3 2 1
'number>