logo

Пріоритетна черга в C++

Пріоритетна черга в C++ — це похідний контейнер у STL, який розглядає лише елемент із найвищим пріоритетом. Черга дотримується політики FIFO, тоді як черга з пріоритетом витягує елементи на основі пріоритету, тобто елемент з найвищим пріоритетом виривається першим.

У певних аспектах вона схожа на звичайну чергу, але відрізняється такими ознаками:

  • У пріоритетній черзі кожен елемент у черзі пов’язаний з певним пріоритетом, але пріоритет не існує в структурі даних черги.
  • Елемент із найвищим пріоритетом у черзі пріоритету буде видалено першим, а черга – за ним FIFO (першим прийшов - першим вийшов) політика означає, що елемент, який вставлено першим, буде видалено першим.
  • Якщо існує більше одного елемента з однаковим пріоритетом, буде враховано порядок елементів у черзі.

Примітка. Пріоритетна черга є розширеною версією звичайної черги, за винятком того, що елемент із найвищим пріоритетом буде видалено першим із черги пріоритету.

Синтаксис пріоритетної черги

 priority_queue variable_name; 

Розберемо пріоритетну чергу на простому прикладі.

Пріоритетна черга в C++

На наведеній вище ілюстрації ми вставили елементи за допомогою функції push(), і операція вставки ідентична звичайній черзі. Але коли ми видаляємо елемент із черги за допомогою функції pop(), то елемент із найвищим пріоритетом буде видалено першим.

Функція-член пріоритетної черги

функція опис
push() Він вставляє новий елемент у пріоритетну чергу.
поп() Він видаляє верхній елемент із черги, який має найвищий пріоритет.
топ() Ця функція використовується для звернення до найвищого елемента пріоритетної черги.
розмір() Він визначає розмір пріоритетної черги.
порожній() Він перевіряє, порожня черга чи ні. На основі перевірки повертає статус.
своп() Він замінює елементи пріоритетної черги іншою чергою такого ж типу та розміру.
Місцезнаходження() Він вставляє новий елемент на початку черги пріоритетів.

Створимо просту програму пріоритетної черги.

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

У наведеному вище коді ми оголосили дві пріоритетні черги, тобто p і q. Ми вставили чотири елементи в чергу пріоритету 'p' і чотири в чергу пріоритету 'q'. Після вставки елементів ми міняємо місцями елементи черги 'p' черги 'q' за допомогою функції swap().

Вихід

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