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

উবুন্টু তে Oracle SQL Developer ইন্সটল + এর সাথে MySQL Database Connecte করার উপায়

Oracle SQL Developer Tool Install করার জন্য আপনর  সিস্টেমে অবশ্যই জাভা - ৮ ইন্সটল করা থাকবে হবে । যদি জাভা - ৮  ইন্সটল করা না থাকে তবে  এই  লিঙ্ক  থেকে ইন্সটল করতে পারবেন । Part-1 : [ Install Oracle SQL Developer Tool ] উবুন্টুর জন্য Linux RPM  ফাইল টি ডাউনলোড করে নিন । এখন ডাউনলোড ফাইল টি Downloads ফোল্ডারে কপি করে রাখুন । এখন - Open Terminal (Ctrl + Alt + T) cd Downloads এখানে যদি আপনি ls command চালান তবে আপনি Downloads ফোল্ডারের আন্ডারে sqldeveloper_file_name.rpm নামে একটি .rpm ফাইল দেখতে পাবেন । এখন নিচের কমান্ড গুলা চালান  sudo apt-get install -y alien sudo alien --scripts sqldeveloper_file_name.rpm ২য় কমান্ডটি রান করলে .rpm ফাইল থেকে একটা .deb ফাইল জেনারেট হবে । এখন .deb ফাইলটি ইন্সটল করার জন্য এই কমান্ড রান করেন    sudo dpkg -i sqldeveloper_file_name.deb Part-2 : [ Connect to MySQL Database ] প্রথমে Connector/J  ডাউনলোড করে নিন । আপনি  Platform Independent ভার্সন ডাউনলোড করবেন । এখ...

[ UVa ] 10048 - Audiophobia

আমাকে কোন একটা শহরের একটা জায়গা থেকে অন্য একটা জায়গায় যেতে হবে । আমি বিভিন্ন রাস্তা ব্যাবহার করে আমার  কাঙ্ক্ষিত জায়গায় যেতে পারি । কিন্তু আমাকে এমন রাস্তা ব্যাবহার করে যেতে হবে যে রাস্তা দিয়ে গেলে আমাকে সবথেকে কম decibels এর শব্দ শুনতে হবে ।   এই সমস্যা টি সমাধান করার জন্য আমাদের কে  গ্রাফের ইনফরমেশন দেয়া হবে সেগুলো নিয়ে একটা Minimum Spanning Tree বানাতে হবে ।  এখন এই MST র উপর query করতে হলে আমাদের কে DFS/BFS চালাতে হবে ।  এইখান থেকে আমরা যে একটা নোড থেকে অন্য একটা নোডে যাওয়ার রাস্তা পাব তার মধ্যে খুজে দেখব কোন এজের ওয়েট সবথেকে বেশি । সেটাই আমাদের কে প্রিন্ট করেত হবে ।  যদি কোন রাস্তা না থাকে তবে no path প্রিন্ট করতে হবে ।  কোড : হ্যাপি কোডিং :)

Eclipse এ PyDev অফলাইনে কিভাবে ইন্সটল করা যায় ?

আমরা যদি Eclipse এ পাইথন ডেভেলপ করতে চাই তবে আমাদের PyDev ইন্সটল প্লাগিন ইন্সটল করা থাকতে হবে । PyDev ইন্সটল করার সবথেকে সহজে উপায় হল Eclipse এর Install New Software অপশন ব্যবহার করে ইন্সটল করা । কিন্তু এইটা মাঝে মাঝে সমস্যা হয় । কাজ করে না । এই জন্য আমরা PyDev প্লাগিন ম্যানুয়ালি ইন্সটল করতে পারব । এবং এটা করার জন্য আমরা যেটা করতে পারি সেটা হল : এই প্লাগিনের সর্বশেষ জিপ ভার্সন টি ডাউনলোড করুন  এখান থেকে জিপ ফাইল টি আনজিপ করুন । আনজিপ করলে আমরা features ও plugins নামে ২ ফাইল পাব  । এই ফাইল ২ টি কপি করে আমরা Eclipse সফটওয়্যারের dropins ফোল্ডারে পেস্ট করে দিব । এখন আমাদের Eclipse যদি চালু করা থাকে তবে Eclipse রিস্টার্ট দিব ।  আমাদের ইন্সটল ঠিক ভাবে হয়েছে কি না সেটা দেখার জন্য আমরা Window -> Preferences এ গিয়ে দেখব PyDev আছে কি না । যদি থাকে তবে এখন আপনি Eclipse এ পাইথনের জন্য কোড লিখতে পারবেন । ধন্যবাদ :)