ম্যাপ (Map) হলো C++ STL-এর একটি কন্টেইনার, যা কী-ভ্যালু (key-value) পেয়ার আকারে ডেটা সংরক্ষণ করে। প্রতিটি key এর জন্য একটি নির্দিষ্ট value থাকে, যা ম্যাপের মধ্যে সংরক্ষণ করা হয়। ম্যাপে প্রতিটি key ইউনিক হতে হয়, তবে value একাধিক key এর জন্য একই হতে পারে। C++ এ map সাধারণত map এবং unordered_map এই দুটি রকমের হতে পারে।
- map: এই কন্টেইনারে
keyগুলো স্বয়ংক্রিয়ভাবে সাজানো অবস্থায় থাকে। - unordered_map: এখানে
keyগুলো সাজানো অবস্থায় থাকে না, বরংhashingব্যবহার করে সংরক্ষণ করা হয়।
map এর বৈশিষ্ট্য
- ইউনিক কী:
mapকন্টেইনারে প্রতিটিkeyইউনিক হতে হয়। - সাজানো পদ্ধতি:
mapকন্টেইনারেkeyগুলো স্বয়ংক্রিয়ভাবে সাজানো থাকে। - অ্যাসোসিয়েটিভ অ্যাক্সেস:
keyএর মাধ্যমে সরাসরিvalueঅ্যাক্সেস করা যায়। - অর্ডার ওনটাইম:
mapRed-Black treeডেটা স্ট্রাকচার ব্যবহার করে, যা O(log n) কমপ্লেক্সিটিতে অ্যাক্সেস দেয়। - নির্দিষ্ট কি না থাকলে মান: নির্দিষ্ট
keyনা থাকলে, ডিফল্টvalueতৈরি করা হয়।
map ঘোষণা এবং ব্যবহার
map ঘোষণা করার সময় key এবং value এর ডেটা টাইপ উল্লেখ করতে হয়। map সাধারণত #include <map> লাইব্রেরি থেকে ইমপোর্ট করে ব্যবহার করা হয়।
#include <iostream>
#include <map>
using namespace std;
int main() {
// map ঘোষণা করা
map<string, int> age;
// মান অ্যাসাইন করা
age["Alice"] = 25;
age["Bob"] = 30;
age["Charlie"] = 28;
// মান প্রদর্শন করা
for (const auto& entry : age) {
cout << entry.first << " is " << entry.second << " years old." << endl;
}
return 0;
}
আউটপুট:
Alice is 25 years old.
Bob is 30 years old.
Charlie is 28 years old.
বর্ণনা:
- এখানে
ageনামের একটিmapতৈরি করা হয়েছে, যারkeyহলোstringএবংvalueহলোint। age["Alice"] = 25;এর মাধ্যমেAliceনামের ব্যক্তির বয়স25সংরক্ষণ করা হয়েছে।forলুপ ব্যবহার করে প্রতিটিkey-valueপেয়ার প্রিন্ট করা হয়েছে।
map এর সাধারণ মেথড
| মেথড | কাজ |
|---|---|
insert() | key-value পেয়ার ইনসার্ট করতে ব্যবহার করা হয়। |
erase() | নির্দিষ্ট key বা পজিশন থেকে key-value পেয়ার মুছে দেয়। |
find() | একটি key খুঁজে বের করে এবং ইটারেটর রিটার্ন করে। |
size() | map এর মোট উপাদানের সংখ্যা রিটার্ন করে। |
clear() | map এর সমস্ত উপাদান মুছে দেয়। |
count() | একটি নির্দিষ্ট key ম্যাপে আছে কিনা তা যাচাই করে। |
empty() | map খালি কিনা তা যাচাই করে। |
উদাহরণ: insert, erase, find, এবং count মেথড
#include <iostream>
#include <map>
using namespace std;
int main() {
map<string, int> age;
// ডেটা ইনসার্ট করা
age.insert({"Alice", 25});
age.insert({"Bob", 30});
age.insert({"Charlie", 28});
// নির্দিষ্ট key খোঁজা এবং প্রিন্ট করা
auto it = age.find("Alice");
if (it != age.end()) {
cout << "Alice's age: " << it->second << endl;
}
// নির্দিষ্ট key মুছে ফেলা
age.erase("Bob");
// একটি key আছে কিনা চেক করা
if (age.count("Bob") == 0) {
cout << "Bob is not in the map." << endl;
}
return 0;
}
আউটপুট:
Alice's age: 25
Bob is not in the map.
বর্ণনা:
age.insert({"Alice", 25});দ্বারা নতুনkey-valueপেয়ার ইনসার্ট করা হয়েছে।age.find("Alice");দ্বারাAliceএর তথ্য খুঁজে বের করা হয়েছে।age.erase("Bob");দিয়েBobএর এন্ট্রি মুছে ফেলা হয়েছে।age.count("Bob")দিয়ে চেক করা হয়েছে যেBobম্যাপে নেই।
উদাহরণ: unordered_map ব্যবহার
unordered_map একইভাবে কাজ করে তবে key-গুলো সাজানো থাকে না।
#include <iostream>
#include <unordered_map>
using namespace std;
int main() {
unordered_map<string, int> age;
// ডেটা ইনসার্ট করা
age["Alice"] = 25;
age["Bob"] = 30;
age["Charlie"] = 28;
// unordered_map এ মান প্রিন্ট করা
for (const auto& entry : age) {
cout << entry.first << " is " << entry.second << " years old." << endl;
}
return 0;
}
বর্ণনা:
- এখানে
unordered_mapব্যবহৃত হয়েছে, যেখানেkey-এর ক্রম ঠিক থাকে না। - এটি সাধারণত দ্রুত কাজ করে, কারণ
unordered_maphashingব্যবহার করে।
map এবং unordered_map এর পার্থক্য
| বৈশিষ্ট্য | map | unordered_map |
|---|---|---|
| ডেটা স্টোরেজ | key-এর ক্রম অনুযায়ী সংরক্ষণ করে | ডেটা ক্রমানুসারে থাকে না |
| অ্যাক্সেস টাইম | O(log n) | গড়ে O(1), তবে সবচেয়ে খারাপ ক্ষেত্রে O(n) |
| ডেটা স্ট্রাকচার | Red-Black Tree ব্যবহার করে | Hash Table ব্যবহার করে |
| ব্যবহার | যখন ডেটা ক্রমানুসারে দরকার | যখন দ্রুত অ্যাক্সেস প্রয়োজন এবং ক্রম গুরুত্বপূর্ণ নয় |
ম্যাপের সুবিধা
- ফাস্ট লুকআপ এবং ইনসার্ট:
mapএবংunordered_mapউভয়ই দ্রুতkey-valueস্টোরেজ এবং রিট্রিভাল সরবরাহ করে। - ইউনিক কী সংরক্ষণ: প্রতিটি
keyইউনিক হওয়ার কারণে ডুপ্লিকেট এন্ট্রি থাকে না। - সহজ ডেটা ম্যানেজমেন্ট:
key-valueপেয়ার ব্যবহার করে ডেটা স্টোরেজে সহজ অ্যাক্সেস এবং ম্যানেজমেন্ট সম্ভব। - ফ্লেক্সিবিলিটি: প্রোগ্রামিং সমস্যায় ম্যাপ ব্যবহার করে সহজে ডেটা সংরক্ষণ, অনুসন্ধান, মুছা ইত্যাদি করা যায়।
সারসংক্ষেপ
- ম্যাপ হলো একটি অ্যাসোসিয়েটিভ কন্টেইনার, যা
key-valueপেয়ার আকারে ডেটা সংরক্ষণ করে। - C++ এ
mapএবংunordered_mapএই দুটি প্রকার রয়েছে। mapডেটা ক্রমানুসারে সংরক্ষণ করে এবংunordered_mapডেটা ক্রমানুসারে রাখে না।
map এবং unordered_map কন্টেইনারগুলো প্রোগ্রামিংয়ে ডেটা ম্যানেজমেন্ট, দ্রুত অনুসন্ধান এবং বিভিন্ন অ্যালগরিদমে খুবই কার্যকর।