logo

Prioritný front v C++

Prioritný front v C++ je odvodený kontajner v STL, ktorý zohľadňuje iba prvok najvyššej priority. Front sa riadi politikou FIFO, zatiaľ čo prioritný front vyberá prvky na základe priority, t. j. prvok s najvyššou prioritou je vyskakovaný ako prvý.

V určitých aspektoch je podobný bežnému radu, ale líši sa nasledujúcimi spôsobmi:

zoznam triediacich polí java
  • V prioritnom fronte je každému prvku vo fronte priradená určitá priorita, ale priorita neexistuje v dátovej štruktúre frontu.
  • Prvok s najvyššou prioritou vo fronte s prioritou bude odstránený ako prvý, kým bude front nasledovať FIFO (prvý dnu, prvý von) politika znamená, že prvok, ktorý je vložený ako prvý, bude vymazaný ako prvý.
  • Ak existuje viac ako jeden prvok s rovnakou prioritou, bude sa brať do úvahy poradie prvku vo fronte.

Poznámka: Prioritný front je rozšírenou verziou normálneho frontu okrem toho, že prvok s najvyššou prioritou bude z prioritného frontu odstránený ako prvý.

Syntax prioritného frontu

 priority_queue variable_name; 

Poďme pochopiť prioritný front na jednoduchom príklade.

Prioritný front v C++

Na obrázku vyššie sme prvky vložili pomocou funkcie push() a operácia vloženia je identická s normálnym frontom. Ale keď vymažeme prvok z frontu pomocou funkcie pop(), potom sa prvok s najvyššou prioritou vymaže ako prvý.

Členská funkcia prioritného frontu

Funkcia Popis
TAM() Vloží nový prvok do prioritného frontu.
pop() Odstráni horný prvok z frontu, ktorý má najvyššiu prioritu.
top() Táto funkcia sa používa na adresovanie najvyššieho prvku prioritného frontu.
veľkosť () Určuje veľkosť prioritného frontu.
prázdne () Overuje, či je front prázdny alebo nie. Na základe overenia vráti stav.
vymeniť () Zamieňa prvky prioritného frontu s iným frontom, ktorý má rovnaký typ a veľkosť.
umiestnenie() Vloží nový prvok na začiatok prioritného frontu.

Vytvorme jednoduchý program prioritného frontu.

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

Pozrime sa na ďalší príklad prioritného frontu.

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

Vo vyššie uvedenom kóde sme deklarovali dva prioritné fronty, t.j. p a q. Vložili sme štyri prvky do prioritného frontu „p“ a štyri do prioritného frontu „q“. Po vložení prvkov vymeníme prvky frontu „p“ za frontu „q“ pomocou funkcie swap().

Výkon

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