মডিউল ২৩-২ঃ কিভাবে STL Priority Queue কাজ করে

এবার আমরা দেখে নেই কিভাবে 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;
}

Last updated