Skip to main content

CPP তে map কেন এবং কিভাবে সেটা ব্যাবহার করতে হয়

C++ এর STL [ Standard Template Library ] এ কিছু কমন Data Structure ইমপ্লিমেন্ট করা আছে যেমন, vector, set, list, map, queue, deque, priority queue stack, bitset ইত্যাদি । এগুলো কে আমরা আমাদের প্রয়োজন অনুসাতে খুব সহজেই ব্যাবহার করেত পারি ।

আজকে আমরা এখানে map নিয়ে কিভাবে কাজ করা যায় সেটা নিয়ে আলোচনা করবো । কারণ উপরে আমরা যেগুলোর নাম লিখেছি তার মধ্যে map সবচেয়ে মজাদার ।

আমরা নিশ্চয় অ্যারে ব্যাবহার করেছি । অ্যারে তে আমরা কি করি ? আমরা অ্যারে এর টাইপ লিখি তারপর তার নাম দেই , তারপর তার সাইজ বলে দেই । আমাদের যদি ১০ সাইজ এর int টাইপ অ্যারে লাগে তখন আমরা লিখি

1
    int arr[10];

value রাখার জন্য এবং পরে সেগুলো প্রিন্ট করার জন্য আমরা আমাদের অ্যারে এর ইনডেক্স ব্যাবহার করি

1
2
3
4
5
6
7
8
    // for input
    for(int i = 0; i < array_size; i++) {
        cin >> arr[i];
    }
    // for output
    for(int i = 0; i < array_size; i++) {
        cout << arr[i] << endl;
    }

অ্যারে ইনডেক্স কিন্তু সবসময় int হতে হবে । ইনডেক্স কখনো double, float, string বা char হতে পারবে না । এখন আমাদের যদি এমন একটা অ্যারের দরকার হয় সেটার ইনডেক্স আমরা আমাদের ইচ্ছা মত [ string , char , int, double] দিতে পারব । তখন আমরা কি করবো ? এই ধরনের ক্ষেত্রে আমরা যদি map ব্যাবহার করি তবে খুব সহজেই সেটা করতে পারব :)

map কে declare করা জন্য আমাদের কে লিখতে হবে ।

1    
map < string, int > my_map;

এখানে প্রথমটাকে বলা হয় key বা index দ্বিতীয়টাকে বলা হয় value অর্থাৎ প্রতিটি key এর বিপরীতে একটা করে value থাকবে । এছাড়াও আমরা আমাদের প্রয়োজন মত আমাদের map declare করতে পারি যেমন :

1    
2
3
4
map <int, int> ii_map;
map <string, string> ss_map;
map <int, string> is_map;
map <string, double > sd_map;

এখন আমরা আমাদের ম্যাপ   map < string, int > my_map; এ ডাটা রাখতে চাই তার জন্য আমাকে এই ভাবে লিখতে হবে ।

1
2
3
4
   // insert value into map
   my_map["BRUR"] = 2009;
   my_map["CSE"] = 2016;
   my_map["Bangladesh"] = 1971;

আমরা যে ডাটা দিলাম সেগুলো প্রিন্ট করা জন্য লিখতে হবে

1
2
3
4
   // print value
   cout << my_map["BRUR"] << endl;
   cout << my_map["CSE"] << endl;
   cout <<  my_map["Bangladesh"] << endl;
Output :
2009
2016
1971
এখন আমি যদি লুপ চালিয়ে map এর ডাটা কে প্রিন্ট করতে চাই তবে আমরা যে টাইপের map সেই টাইপের একটা iterator বানাতে হবে । এখন প্রশ্ন হতে পারে iterator আবার কি জিনিস ? iterator আমাদের map এর ভালুর এড্রেস রাখতে পারে এবং আমরা সেই এড্রেস ধরে map এর key, value দুইটাকেই প্রিন্ট করেত পারি ।

আমাদের map এর নাম my_list এখন আমি যদি এই টাইপের iterator বানাতে চাই তবে লিখতে হবে

1
map <string, int> :: iterator it_name;

এই iterator কে ব্যাবহার করে আমরা লুপের মাধ্যমে ম্যাপের ডাটা কে অ্যাক্সেস করতে পারব ।

1
2
3
    for(it_name = my_map.begin(); it_name != my_map.end(); ++it_name) {
         cout << it_name->first << " = " << it_name->second << endl;
    }
Output :
BRUR = 2009
Bangladesh = 1971
CSE = 2016

map এর ক্ষেত্রে একটা বিষয় মাথায় রাখতে হবে সেটা হল map ডিফল্ট ভাবে তার key বা index অনুসারে ডাটা কে সর্ট [ ছোট থেকে বড় ] করে রাখে । এই জন্য আমরা Bangladesh কে সব শেষে ইনপুট নেয়ার পরও সেটা শেষে না এসে ২য় নাম্বারে এসেছে :)

সবগুলো কে একসাথে করলে কোড টি দেখতে এই রকম হবে ।
কোড :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <iostream>
#include <map> // include for map 

using namespace std;

int main()
{
    // Differetn type of map declare
    map <int, int> ii_map;
    map <string, string> ss_map;
    map <int, string> is_map;
    map <string, double > sd_map;

    map <string, int> my_map; // Declare map variable

    // insert value into map
    my_map["BRUR"] = 2009;
    my_map["CSE"] = 2016;
    my_map["Bangladesh"] = 1971;

    // print
    cout << my_map["BRUR"] << endl;
    cout << my_map["CSE"] << endl;
    cout <<  my_map["Bangladesh"] << endl;

    // print using iterator
    map <string, int> :: iterator it_name;

    for(it_name = my_map.begin(); it_name != my_map.end(); ++it_name) {
         cout << it_name->first << " = " << it_name->second << endl;
    }

    return 0;
}

পুনশ্চ : map এর অনেকগুলো built-in ফাংশন আছে সেগুলো পাওয়া যাবে ম্যাপ ফাংশন লিস্ট উইথ কোড

হ্যাপি সি প্লাস-প্লাসইং :)


Comments

Popular posts from this blog

উবুন্টুতে রুট পাসওয়ার্ড ভুলে তা রিকভার করার উপায় ।

যদি কেউ রুট পাসওয়ার্ড ভুলে যান তাহলে নিচের কাজ গুলো করে নতুন পাসওয়ার্ড সেট করতে পারবেন: প্রথমে পিসি রিস্টার্ট দিন । দিয়ে UP/DOWN করে kernel version সিলেক্ট করে e চাপুন । ব্ল্যাক Screen আসবে এবার একটা Space দিয়ে লিখুন “Single” [ Enter ] এরপর b চাপুন ফলাফল : লিনাক্সের Single user Mood এ চলে আসছেন । এখন লিখুন passwd root [ Enter ] এখন নতুন পাসওয়ার্ড খানা টাইপ করেন [ এন্টার ] আবার টাইপ করেন [ এন্টার ] কাজ শেষ , এবার reboot টাইপ করেন । এখন নতুন পাসওয়ার্ড দিয়ে লগইন করেন। পুনশ্চ : যদি আপনার উইন্ডোজ এর সাথে ডুয়েল বুট করা থাকে তবে এই প্রক্রিয়া কাজ করবে না ।

Fix The BIOS in this system is not fully ACPI compliant in Windows 7

এই সমস্যা সমাধান করার জন্য আপনি নিচের ধাপ গুলো অনুসরণ করুন। ধাপ ১ :  আপানর  কম্পিউটার এ উইন্ডোজ এর ডিস্ক থেকে বুট করুন । নীচের মত উইন্ডো আসলে Shift + F10 চাপুন । এর ফলে কমান্ড প্রম্প্ট ওপেন হবে। ধাপ ২ : এখন CMD তে নিচের কমান্ড গুলি ধারবাহিক ভাবে লিখুন C: bootrec /FixMbr bootrec /FixBoot bootrec /RebuildBcd exit  এখানে  C হলো যে ড্রাইভ এ উইন্ডোজ দেয়া আছে।  আপনার যদি অন্য কোনো ড্রাইভ ( D, E, F, ..... ) এ উইন্ডোজ দেয়া থাকে তবে আপনাকে C এর জায়গায় সেই ড্রাইভ এর নাম লিখতে হবে।  উপরের সব কমান্ড যদি সঠিক ভাবে বিল্ড হয় তবে আপনি আপনার কম্পিউটার রিস্টার্ট দিন।  দেখবেন আপনার সমস্যা সমাধান হয়ে গেছে :D