STL পরিচিতি । পর্ব - ০৩
আজকের আলোচ্য টপিক ঃ ম্যাপ
- মনে করো , তোমাকে তোমার ক্লাসের সকল ছাত্রের কোন বিষয়ে ১০০ তে প্রাপ্ত নাম্বার দেয়া হলো। এখন , তোমাকে বলা হলো ১ থেকে ১০০ পর্যন্ত কোন নাম্বার কতজন ছাত্র পেয়েছে? যারা মোটামুটি প্রব্লেম সলভ করেছো তাদের মাথায় যে সলুশ্যন এসেছে সেটি হলোঃ
একটা অ্যারে নিবো ১০১ সাইজের! যেখানে সকল ইনডেক্সের ভ্যালু প্রাথমিকভাবে ০ থাকবে। প্রত্যেক ছাত্রের নাম্বার পাওয়া মাত্রই অ্যারের ততো তম ইন্ডেক্সের ভ্যালু ১++ করে দিবো। কাজ শেষ!!!
- এখন যদি আমি তোমাদেরকে এক আজব স্কুলের নাম বলি যেখানে কোন ছাত্রের নাম্বার নেগেটিভ ও হতে পারে! সেই স্কুলের স্যার রা মার্কস দেয় -১০০ থেকে +১০০ পর্যন্ত। এখন তোমাদের কেউ কেউ হয়তো একটু কনফিউজড! কিন্তু এমন কিছু চালাক প্রোগ্রামার তোমার আশেপাশে আছে যারা এই সমস্যা টি ও অ্যারে দিয়েই সমাধান করে ফেলবে!!! কি পোলাপান রে ভাই! আর তুমি যদি এখনো সমাধান টা না পাও তাহলে এই সমাধান টা তোমার চিন্তা করার জন্যই রেখে দিলাম।
- এবার তাহলে আরো হার্ড প্রব্লেম দেয়া যাক। তোমাকে একটা ক্লাসের N জন ছাত্রের নাম দেয়া আছে।
তোমাকে বলতে হবে সেই ক্লাসে "Hablu" নামের কয়জন ছাত্র আছে? বুঝতেই পারছো একই নামের একাধিক ছাত্র থাকবে। এবার আর তোমার কোন উপায় নাই!!! একটাই উপায় STL ( MAP ).
ম্যাপ ডিক্লেয়ার করা হয়ঃ
map<data_type_of_index/key , data_type_of_value>map_name;
এবার প্রব্লেম টি কিভাবে করবো দেখোঃ
একটা ম্যাপ কে যেকোন ডেটা টাইপের ইনডেক্স,যেকোন ডেটা টাইপের ভ্যালুর জন্যই ডিক্লেয়ার করা যায়। যেমন , উপরে আলোচিত প্রথম দুইটা প্রব্লেমের জন্য তুমি
map<int , int>m;
এভাবে ম্যাপ ডিক্লেয়ার করবে।
- এবার যদি তোমাকে বলা হয় শুধু Hablu নয়, যতোগুলো নাম এন্ট্রি আছে প্রত্যেক নামের কয়টা করে ছাত্র আছে সেই ক্লাসে তা প্রিন্ট করতে তাহলে তুমি কি করবে? এক্ষেত্রে আমরা একটা নতুন জিনিসের সাথে পরিচিত হবো।
যার নাম Iterator । আমরা একটা লুপ ঘুরানোর জন্য যেমন একটা কাউন্টার ভ্যারিয়েবল ব্যাবহার করি , তেমনি STL এ ভেক্টর,ম্যাপ,সেট এসবের সকল এলিমেন্ট এক্সেসের জন্য ইটারেটর ব্যাবহার করি।
এখানে আমরা ম্যাপ ডিক্লেয়ার করার নিচের লাইনে একই ডেটা টাইপ সম্পন্ন ইটারেটর ডিক্লেয়ার করেছি এলিমেন্ট গুলো লুপ ঘুরিয়ে এক্সেস করার জন্য।
২য় লুপ টা তে আমি ম্যাপ এর সকল এলিমেন্ট এক্সেস করেছি ইটারেটর এর মাধ্যমে।
it->first দ্বারা বুঝানো হয়েছে ম্যাপের ইনডেক্স বা Key ।
it->second দ্বারা বুঝানো হয়েছে ম্যাপের ভ্যালু।
- ম্যাপ টা কী সম্পূর্ণ খালি কি না? মানে এখন পর্যন্ত ব্যাবহৃত হয়েছে কী না জানতে কী করবে?
- এখন পর্যন্ত ম্যাপে কতগুলো KEY / INDEX নিয়ে কাজ করা হয়েছে জানতে কী করবে?
- ম্যাপের স্পেসিপিক কোন KEY / INDEX এ রাখা ভ্যালু মুছতে কী করবে?
- এখন মনে কর, ম্যাপের সকল ভ্যালু মুছে ম্যাপ টা আবার নতুন কোন টেস্ট কেসের জন্য ব্যাবহার করতে চাও। তাহলে কী করবে? এই সব প্রশ্নের উত্তর ক্রমান্বয়ে নিচের কোডে দেয়া হলোঃ
Comments
Post a Comment