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

  Good becomes great, bad becomes worse. A strong man who has known power all his life can lose respect for that power, but a weak man knows the value of strength and knows compression

উইন্ডোজ এর Diskpart এর কিছু কমান্ড নিয়ে কাজ করা

অনেক সময় দেখা যায় যে উইন্ডোজ দেয়ার সময় আমরা আমাদের হার্ডডিস্ক কে গুই ব্যবহার করে আমাদের প্রয়োজন অনুসারে ভাগ করতে পারি না । সেই ক্ষেত্রে আমারা যদি ডিস্কপার্ট সফটওয়্যার টি ব্যাবহার করি তবে সহজেই সেটা করতে পারব ।  উইন্ডোজ দেয়ার সময় যখন Install Windows অপশন আসে তখন আমারা যদি Shift + F10 চাপি তবে উইন্ডোজ এর কমান্ড লাইন চলে আসবে । সেখানে যদি আমরা diskpart লিখলেই diskpart ওপেন হবে । এখানে আমরা ডিস্কপার্ট এর বিভিন্ন কমান্ড ব্যাবহার করতে পারব ।     এখন দেখব ডিস্কপার্ট এর বিভিন্ন কমান্ড কিভাবে ব্যাবহার করা যায় ।  আমার কয়টা হার্ড ডিস্ক আছে আছে সেটা দেখার জন্য list disk লিস্ট থেকে কোন একটা হার্ডডিস্ক কে সিলেক্ট করার জন্য  select Disk 0; ডিস্ক ০ কে সিলেক্ট করবে সিলেক্ট করা হার্ড ডিস্ক এর আন্ডারে কয়টা পার্টিশন আছে সেটা দেখার জন্য list partition primary partition ক্রিয়েট করার জন্য কমান্ড  create partition primary size = sss    এটার ড্রাইভ লেটার দেয়ার জন্য লিখতে হবে assign letter = 'D' এটা কে ntfs এ ফরমেট করার জন্য ল...