কিউ-এর ক্ষেত্রে আমরা দেখেছিলাম, কন্টেইনারটিতে যে ভ্যারিয়েবল সবার আগে আসছে, তার প্রসেসিং হচ্ছে সবার আগে। কিন্তু ছোটবেলা থেকে তো অভ্যাস আমাদের যে বড় তার প্রসেসিং সবার আগে দেখার! 😉 এই সুবিধা নেওয়ার জন্যই আমরা ব্যবহার করতে পারি priority_queue কন্টেইনারটি। এটি যা করবে তা হল, একের পর এক ভ্যারিয়েবল নিবে ঠিকই, এবং সাজানোর সময় যেটা সবচেয়ে বড়, সেটাকে রাখবে সবার সামনে। যেমন, আমরা যদি ৭, ৮, ১৫, ১১, ৬৯, ৪২০ ইনপুট দি, সেটা এই কন্টেইনার সাজিয়ে রাখবে এই ক্রমেঃ ৪২০, ৬৯, ১৫, ১১, ৮, ৭।
যেভাবে ডিক্লেয়ার করবো
প্রায়োরিটি কিউ ব্যবহার করার জন্য আমাদের আলাদা কোনো হেডার ফাইল লাগবে না। queue হেডার ফাইলটি ইনক্লুড করলেই হয়ে যাবে। এবং আগের মতই এর ডিক্লারেশন হবে নিচের মতঃ
priority_queue <int> pq;
কন্টেইনারে ভ্যারিয়েবল ইনপুট দিব push() ব্যবহার করে
#include <iostream> #include <queue> using namespace std; int main () { priority_queue<int> mypq; int i, in; for (i=0; i<5; i++) { cin >> in; mypq.push(in); } return 0; }
এটা রান করলে ৫ টা ভ্যারিয়েবল ইনপুট নিয়ে কন্টেইনারে রাখবে।
কন্টেইনারে সবার সামনের ভ্যারিয়েবল এক্সেস করবো top() দিয়ে
এবার আমরা আমাদের আগের কোড থেকেই সবার সামনে কোন ভ্যারিয়েবল আছে সেটা দেখবো এভাবেঃ
#include <iostream> #include <queue> using namespace std; int main () { priority_queue<int> mypq; int i, in; for (i=0; i<5; i++) { cin >> in; mypq.push(in); } cout << "First: " << mypq.top() << endl; return 0; }
কোডটা রান করে ৫ টি ইন্টিজার ইনপুট দিলে আউটপুট হবে নিচের মতঃ
অর্থাৎ সবচেয়ে বড় উপাদানটি থাকবে সবার সামনে!
কন্টেইনার খালি কি না চেক করবো empty() দিয়ে
#include <iostream> #include <queue> using namespace std; int main () { priority_queue<int> mypq; int i, in; for (i=0; i<5; i++) { cin >> in; mypq.push(in); } if (mypq.empty()) { cout << "The container is empty\n"; } return 0; }
কোডটা রান করলে এটি ৫ টি ইন্টিজার ইনপুট নিবে। এরপর কিছু আউটপুট দিবে না, কারণ কন্টেইনারটি খালি না। এতে ৫ টি ইন্টিজার আছে!
কন্টেইনারে সর্বমোট কয়টি ভ্যারিয়েবল আছে চেক করবো size() দিয়ে
#include <iostream> #include <queue> using namespace std; int main () { priority_queue<int> mypq; int i, in; for (i=0; i<5; i++) { cin >> in; mypq.push(in); } if (mypq.empty()) { cout << "The container is empty\n"; } else cout << "There are " << mypq.size() << " integers in the container.\n"; return 0; }
এই কোড রান করলে আউটপুট হবে নিচের মত।
প্রসেসিং শেষে সবার সামনের ভ্যারিয়েবল বের করে দিব pop() দিয়ে
আমরা নিচের কোডটা দেখেই এবার প্রায়োরিটি কিউ-এর পুরো ব্যাপারটা একসাথে বুঝে নেওয়ার চেষ্টা করবো। আমরা যা করবো, তা হল প্রথমেই ১০ টি ইন্টিজার রাখবো কন্টেইনারটিতে। এরপর, যতক্ষণ কন্টেইনারটি খালি হবে না ততক্ষণ সবার সামনের ইন্টিজার প্রিন্ট করবো এবং সেটি কন্টেইনার থেকে সেটি বের করে দিব। এরপর সবশেষে কন্টেইনারটির সাইজ প্রিন্ট করবো। বলা বাহুল্য সেটি হবে শুণ্য।
#include <iostream> #include <queue> using namespace std; int main () { priority_queue<int> mypq; int i, in; for (i=0; i<10; i++) { cin >> in; mypq.push(in); } while (!mypq.empty()) { cout << mypq.top() << endl; mypq.pop(); } cout << "Number of integers in the container: " << mypq.size() << endl; return 0; }
কোডটি রান করে আমরা ১০ টা ইন্টিজার ইনপুট দিলে নিচের মত আউটপুট দেখতে পাব।
অর্থাৎ, যে ক্রমেই ইনপুট দেওয়া হোক না কেন, সবচেয়ে বড় উপাদানটি প্রসেসিং শেষে বের হয়ে গেছে সবার আগে!
আজকের মত এখানেই শেষ। কোনো সমস্যা থাকলে কমেন্টে বল। আর আগামী পর্বে আমরা দেখবো ম্যাপ!
আচ্ছা, যদি উল্টা টা করতে চাই? মানে সবচেয়ে ছোট সংখ্যা বের করতে চাইলে & তা পপ করে দিব ?
প্রায়োরিটি কিউ-তে সবচেয়ে বড় উপাদানটাই সবচেয়ে সামনে থাকে। তাই পপ করলে সবচেয়ে বড় উপাদানটিই পপ হয়ে যাবে। আপনি যদি ছোটটিকে সবার সামনে রাখতে চান, তাহলে “<" অপারেটরটিকে ওভারলোড করে দিতে হবে। 🙂