قائمة انتظار الأولوية في 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' باستخدام وظيفة المبادلة ().
انتاج |
Elements of p are : 8 7 6 5 Elements of q are : 4 3 2 1
'number>