logo

Приоритетна опашка в C++

Опашката с приоритет в C++ е производен контейнер в STL, който взема предвид само елемента с най-висок приоритет. Опашката следва политиката на FIFO, докато приоритетната опашка изважда елементите въз основа на приоритета, т.е. елементът с най-висок приоритет се изважда първи.

Тя е подобна на обикновената опашка в определени аспекти, но се различава по следните начини:

  • В опашката с приоритет всеки елемент в опашката е свързан с някакъв приоритет, но приоритетът не съществува в структурата на данните на опашката.
  • Елементът с най-висок приоритет в приоритетна опашка ще бъде премахнат първи, докато опашката следва FIFO (първи влязъл, първи излязъл) политика означава, че елементът, който е вмъкнат пръв, ще бъде изтрит първи.
  • Ако съществува повече от един елемент с еднакъв приоритет, тогава редът на елемента в опашката ще бъде взет под внимание.

Забележка: Приоритетната опашка е разширената версия на нормалната опашка, с изключение на това, че елементът с най-висок приоритет ще бъде премахнат първи от приоритетната опашка.

Синтаксис на приоритетната опашка

 priority_queue variable_name; 

Нека разберем приоритетната опашка чрез прост пример.

Приоритетна опашка в C++

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

Членска функция на приоритетна опашка

функция Описание
натиснете () Той вмъква нов елемент в приоритетна опашка.
поп () Той премахва най-горния елемент от опашката, който има най-висок приоритет.
Горна част() Тази функция се използва за адресиране на най-горния елемент на приоритетна опашка.
размер () Той определя размера на приоритетната опашка.
празен() Той проверява дали опашката е празна или не. Въз основа на проверката връща статуса.
размяна() Той разменя елементите на приоритетна опашка с друга опашка със същия тип и размер.
местоположение () Той вмъква нов елемент в горната част на приоритетната опашка.

Нека създадем проста програма за приоритетна опашка.

 #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