Опашката с приоритет в C++ е производен контейнер в STL, който взема предвид само елемента с най-висок приоритет. Опашката следва политиката на FIFO, докато приоритетната опашка изважда елементите въз основа на приоритета, т.е. елементът с най-висок приоритет се изважда първи.
Тя е подобна на обикновената опашка в определени аспекти, но се различава по следните начини:
- В опашката с приоритет всеки елемент в опашката е свързан с някакъв приоритет, но приоритетът не съществува в структурата на данните на опашката.
- Елементът с най-висок приоритет в приоритетна опашка ще бъде премахнат първи, докато опашката следва FIFO (първи влязъл, първи излязъл) политика означава, че елементът, който е вмъкнат пръв, ще бъде изтрит първи.
- Ако съществува повече от един елемент с еднакъв приоритет, тогава редът на елемента в опашката ще бъде взет под внимание.
Забележка: Приоритетната опашка е разширената версия на нормалната опашка, с изключение на това, че елементът с най-висок приоритет ще бъде премахнат първи от приоритетната опашка.
Синтаксис на приоритетната опашка
priority_queue variable_name;
Нека разберем приоритетната опашка чрез прост пример.
В горната илюстрация сме вмъкнали елементите с помощта на функция 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<<'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>
Нека видим още един пример за приоритетна опашка.
#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; }
В горния код сме декларирали две приоритетни опашки, т.е. p и q. Вмъкнахме четири елемента в опашка с приоритет 'p' и четири в опашка с приоритет 'q'. След като вмъкнем елементите, разменяме елементите на опашка 'p' с опашка 'q', като използваме функция swap().
Изход
Elements of p are : 8 7 6 5 Elements of q are : 4 3 2 1
'number>