এবার আমরা দেখে নেই কিভাবে STL priority queue কাজ করে।
Syntax: priority_queue<data type> priority_queue_name
example: priority_queue<int> pq; // একটি প্রায়োরিটি কিউ নেওয়া হয়েছে যার নাম pq এবং যাতে ইন্টিজার টাইপের ডাটা থাকবে। এবং এটি একটি ম্যাক্সিমাম প্রায়োরিটি কিউ।
#include <bits/stdc++.h>
using namespace std;
int main()
{
priority_queue<int> pq; // একটি ম্যাক্সিমাম প্রায়োরিটি কিউ নেওয়া হচ্ছে।
while (true)
{
int c;
cin >> c; // অপারেশন ইনপুট নেওয়া হচ্ছে। এক্ষেত্রে আমরা ধরে নিচ্ছি ০ হচ্ছে পুশ, ১ হচ্ছে পপ আর ২ হচ্ছে টপ প্রিন্ট করা।
if (c == 0)
{
int x;
cin >> x; // সংখ্যা ইনপুট নিয়ে
pq.push(x); // প্রায়োরিটি কিউতে পুশ করা হচ্ছে। যার কমপ্লেক্সিটি O(logN)
}
else if (c == 1)
{
pq.pop(); // পপ করা হচ্ছে যার কমপ্লেক্সিটি O(logN)। এক্ষেত্রে পপ করলে টপের ভেলু অর্থাৎ সবচেয়ে বড় ভেলুটি পপ হবে।
}
else if (c == 2)
{
cout << pq.top() << endl; // টপের ভেলু অর্থাৎ সবচেয়ে বড় ভেলুটি [যেহেতু এটি ম্যাক্সিমাম প্রায়োরিটি কিউ ] প্রিন্ট হবে। যার কমপ্লেক্সিটি O(1)
}
else
{
break;
}
}
return 0;
}
এবার আমরা দেখে নেই কিভাবে মিনিমাম প্রায়োরিটি কিউ কাজ করে।
example: priority_queue<int, vector<int>, greater<int>> pq;
এক্ষেত্রে greater<int> একটি ক্লাস তাই আমরা greater<int>() এভাবে লিখি নাই। এভাবে লিখলে এটি ফাংশন হয়ে যেত।
#include <bits/stdc++.h>
using namespace std;
int main()
{
priority_queue<int, vector<int>, greater<int>> pq; // একটি মিনিমাম প্রায়োরিটি কিউ নেওয়া হচ্ছে।
while (true)
{
int c;
cin >> c; // অপারেশন ইনপুট নেওয়া হচ্ছে। এক্ষেত্রে আমরা ধরে নিচ্ছি ০ হচ্ছে পুশ, ১ হচ্ছে পপ আর ২ হচ্ছে টপ প্রিন্ট করা।
if (c == 0)
{
int x;
cin >> x; // সংখ্যা ইনপুট নিয়ে
pq.push(x); // প্রায়োরিটি কিউতে পুশ করা হচ্ছে। যার কমপ্লেক্সিটি O(logN)
}
else if (c == 1)
{
pq.pop(); // পপ করা হচ্ছে যার কমপ্লেক্সিটি O(logN)। এক্ষেত্রে পপ করলে টপের ভেলু অর্থাৎ সবচেয়ে বড় ভেলুটি পপ হবে।
}
else if (c == 2)
{
cout << pq.top() << endl; // টপের ভেলু অর্থাৎ সবচেয়ে ছোট ভেলুটি [যেহেতু এটি মিনিমাম প্রায়োরিটি কিউ ] প্রিন্ট হবে। যার কমপ্লেক্সিটি O(1)
}
else
{
break;
}
}
return 0;
}