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; |
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; } |
BRUR = 2009
Bangladesh = 1971
CSE = 2016
map এর ক্ষেত্রে একটা বিষয় মাথায় রাখতে হবে সেটা হল map ডিফল্ট ভাবে তার key বা index অনুসারে ডাটা কে সর্ট [ ছোট থেকে বড় ] করে রাখে । এই জন্য আমরা Bangladesh কে সব শেষে ইনপুট নেয়ার পরও সেটা শেষে না এসে ২য় নাম্বারে এসেছে :)
সবগুলো কে একসাথে করলে কোড টি দেখতে এই রকম হবে ।
কোড :
পুনশ্চ : map এর অনেকগুলো built-in ফাংশন আছে সেগুলো পাওয়া যাবে ম্যাপ ফাংশন লিস্ট উইথ কোড সবগুলো কে একসাথে করলে কোড টি দেখতে এই রকম হবে ।
কোড :
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; } |
হ্যাপি সি প্লাস-প্লাসইং :)
Comments
Post a Comment