Skip to main content

STL শেখা । পর্ব ৫ । ম্যাপ (১)


আজকে আমরা ম্যাপ সম্পর্কে জানবো ।
আমরা সাধারণত কোনো অ্যারে ইউজ করি যদি একই ধরণের অনেক গুলো ডেটা স্টোর করে রাখতে চাই ।
তো ম্যাপ আমাদের কে সেই সুবিধা তো দিবেই পাশা পাশি বাড়তি কিছু জিনিশ ও পাবো আমরা ।
এখানে সব কিছুই পেয়ার আকারে স্টোর হবে আর সব কয়টা ভেল্যু ই থাকবে একেকটা ইউনিক "কী" এর আন্ডারে ।
আর "কী" গুলো অটোমেটিক ভাবে সর্ট হয়ে থাকবে । যেমন ?
আচ্ছা কথা না বাড়িয়ে কাজে চলে যাই আমরা !
প্রথমেই দেখবো ম্যাপ কীভাবে ইমপ্লিমেন্ট করবো আমাদের প্রোগ্রামে ।
এটার জন্য আমাদের একটা লাইব্রেরী ইনক্লুড করে নিতে হবে শুরু তেই
#include<iostream>
#include<map>
using namespace std;
int main()
{
    return 0;
}



এখন আমরা দেখবো কীভাবে ম্যাপ এর ভেতরে আমরা কিছু রাখতে পারি ।
শুরু তেই আমরা "কী" এর কথা বলেছিলাম ।
এখন আমরা দেখবো "কী" টা কেমন টাইপ ডেটা হবে সেটাও আমরা ঠিক করে দিতে পারব । যেমন , স্ট্রিং অথবা ইন্টিজার !
প্রথমে আমরা ঠিক করে দিবো "কী" এর ডেটা টাইপ ,
তারপরে আমরা ঠিক করে দিবো ভেল্যু এর ডেটা টাইপ ।
আমরা এভাবে করবো ...
#include<iostream>
#include<map>

using namespace std;

int main()
{
    map<int,int>mp;

    return 0;
}

এখানে আমরা প্রথমেই mp নামের একটা ম্যাপ নিয়েছি আর সেটার মাঝে বলে দিয়েছি যে ,কী এবং ভেল্যু ২টার ডেটা টাইপ ই হবে ইন্টিজার টাইপ । এখন আমরা দেখবো কীভাবে ডেটা ঢুকানো হবে ম্যাপ এ ।

#include<iostream>
#include<map>

using namespace std;

int main()
{
    map<int,int>mp;
    
    mp.insert({1,10});
    mp.insert({2,20});
    mp.insert({3,30});

    return 0;
}


এখানে আমরা দেখতে পাচ্ছি,
ম্যাপ এর ভেতরে ভেল্যু নিলাম ।
১ এর আন্ডারে আছে ১০ । মানে হলো ১০ কে পেতে চাইলে আমাদের "কী" ১ এর কাছে যেতে হবে ।
১ আর ১০ মিলে পেয়ার তৈরি করেছে । তাই আমরা এভাবেও লিখতে পারি চাইলে ।


#include<iostream>
#include<map>

using namespace std;

int main()
{
    map<int,int>mp;
    
    mp.insert(make_pair(1,10));
    mp.insert(make_pair(2,20));
    mp.insert(make_pair(3,30));
    mp.insert(make_pair(4,40));
    mp.insert(make_pair(5,50));
    
    return 0;
}


ঠিক একই ভাবে ২ এর পেয়ার হলো ২০ । এখন আমরা এই কী কে ইন্ডেক্স ও বলতে পারি ।
আমরা যদি অ্যারে ভালো ভাবে বুঝে থাকি তাহলে ইন্ডেক্স নিয়ে কনফিউশন থাকার কথা নয় !
তো আমি যদি ৪০ কে প্রিন্ট করতে চাই তাহলে কী করতে হবে ?


#include<iostream>
#include<map>
using namespace std;
int main()
{
    map<int,int>mp;
    
    mp.insert(make_pair(1,10));
    mp.insert(make_pair(2,20));
    mp.insert(make_pair(3,30));
    mp.insert(make_pair(4,40));
    mp.insert(make_pair(5,50));
    

    cout<<mp[4];



    return 0;
}


৪০ এর "কী" হলো ৪ তাই ৪ দিয়েই আমরা পেয়ে গেলাম ৪০ !
তো এখন যদি আমরা সম্পূর্ণ ম্যাপ টাকে প্রিন্ট করতে চাই , তাহলে কি করতে হবে ?
নিশচয়ই তোমার মাথায় লুপ এর কথা এসেছে ?
হ্যা ।
আমরা ফর লুপ ইউজ করে করতে পারি !
তবে তার জন্য আমাদের দরকার পড়বে একটি ইটারেটর ।
যেটি কিনা ম্যাপ এর প্রথম এলিমেন্ট এর দিকে পয়েন্ট করে থাকবে আর একে একে ম্যাপ টা ট্রাভারস করে সব এলিমেন্ট প্রিন্ট করে দেখাবে !


#include<iostream>
#include<map>

using namespace std;

int main()
{
    map<int,int>mp;
    mp.insert(make_pair(1,10));
    mp.insert(make_pair(2,20));
    mp.insert(make_pair(3,30));
    mp.insert(make_pair(4,40));
    mp.insert(make_pair(5,50));
    
    map<int,int>::iterator it;
    
    for(it=mp.begin(); it!=mp.end(); it++)
    {
        cout<<it->first<<" "<<it->second<<"\n";
    }

    return 0;
}

আমরা একটি ইটারেটর নিয়েছি আইটি নামে ,
যেটা শুরু থেকে শেষ অব্দি সব গুলো সংখ্যা আর "কী" প্রিন্ট করে দেখিয়েছে ।
আবার সেই সাথে আরেকটা নতুন জিনিশ আমরা ব্যবহার করেছি ।
আমরা ইটারেটর কে বলে দিয়েছি কে ফার্স্ট আর কে সেকেন্ড ।
এখানে ফার্স্ট সেকেন্ড মানে হলো "কী " আর "ভেল্যু" ।
ইটারেটর প্রথমে পয়েন্ট করবে "কী" পরে পয়েন্ট করবে ঐ কী এর আন্ডারে যে ভেল্যু আছে সেটা !
তো চটপট নিজের কম্পিউটারে প্রোগ্রাম টা রান করে দেখো তো , যা বললাম ঠিক কিনা ?
আমরা এখন আরেকটা জিনিশ দেখবো !
শুরুতে বলেছিলাম , "কী" গুলা অটোমেটিক সর্ট হয়ে যায় । সেটাই দেখবো চলো !


#include<iostream>
#include<map>
using namespace std;

int main()
{
    map<int,int>mp;
    mp.insert(make_pair(3,30));
    mp.insert(make_pair(4,40));
    mp.insert(make_pair(5,50));

    
    mp.insert(make_pair(2,20));
    mp.insert(make_pair(1,10));
    
    map<int,int>::iterator it;
    
    for(it=mp.begin(); it!=mp.end(); it++)
    {
        cout<<it->first<<" "<<it->second<<"\n";
    }

    return 0;
}


আমরা এখানে যদিও ১,২ "কী" এর ভেল্যু সবার শেষে ম্যাপ এ ঢুকিয়েছি ,
তারপরেও প্রিন্ট করলে দেখতে পাবে সেই আগের মতো ই ১ থেকে প্রিন্ট হচ্ছে !
মজার না ব্যপার টা ?
আশা করি বুঝতে পেরেছো !
আজ এখানেই শেষ করলাম ।
পরবর্তী তে এই ম্যাপ নিয়েই আরো কাজ করবো আমরা । তাই আগে বেশি বেশি প্র্যাকটিস করে নাও ।
ভালো থাকো ! হ্যাপি কোডিং ।

Written By -