C++ এর স্ট্যান্ডার্ড লাইব্রেরি বিভিন্ন Associative Containers সরবরাহ করে যা ডেটাকে একটি নির্দিষ্ট অর্ডারে বা নির্দিষ্ট কীগুলির সাথে যুক্ত করে সংরক্ষণ করে। এই কনটেইনারগুলোতে ডেটা অনুসন্ধান এবং সংশোধন দ্রুত হয় কারণ এগুলো সাধারণত সঞ্চিত ডেটাকে স্বয়ংক্রিয়ভাবে সাজানো রাখে (সাধারণত একটি বৈদ্যুতিন সার্চ ট্রি বা লাল-কালো ট্রি দ্বারা)।
নিচে C++ এর কিছু সাধারণ Associative Containers: std::set, std::map, std::multiset, এবং std::multimap এর ব্যবহার এবং পার্থক্য আলোচনা করা হয়েছে:
১. std::set
std::set একটি কনটেইনার যা ইউনিক (অদ্বিতীয়) উপাদানসমূহ সংরক্ষণ করে এবং এগুলো স্বয়ংক্রিয়ভাবে সাজানো থাকে। এটি সিএট (Tree) ডেটা স্ট্রাকচার ব্যবহার করে, তাই ডেটা খুব দ্রুত খুঁজে পাওয়া যায় এবং সন্নিবেশ করা যায়।
- পার্থক্য: কোন মানের ডুপ্লিকেট অনুমতি দেয় না।
- গঠন: কীগুলোর উপর ভিত্তি করে সাজানো থাকে।
উদাহরণ (std::set):
#include <iostream>
#include <set>
int main() {
std::set<int> numbers;
// সেটে উপাদান যোগ করা
numbers.insert(5);
numbers.insert(2);
numbers.insert(8);
numbers.insert(3);
numbers.insert(5); // ডুপ্লিকেট, তাই যোগ হবে না
// সেটের উপাদান প্রিন্ট করা
for (int num : numbers) {
std::cout << num << " ";
}
return 0;
}আউটপুট:
2 3 5 8এখানে, 5 ডুপ্লিকেট হওয়ায় সেটে একবারই থাকবে, এবং উপাদানগুলো সাজানো অবস্থায় থাকবে।
২. std::map
std::map একটি অ্যাসোসিয়েটিভ কনটেইনার যা কী-ভ্যালু জোড়া সংরক্ষণ করে। এখানে প্রতিটি কী অবশ্যই ইউনিক হতে হবে, এবং কী-এর উপর ভিত্তি করে মান (ভ্যালু) সংরক্ষিত হয়। এটি সাধারণত সাজানো থাকে এবং দ্রুত অনুসন্ধান (log(n) সময়) সমর্থন করে।
- পার্থক্য: প্রতিটি কীয়ের জন্য একটি মান সংযুক্ত থাকে, কীগুলো অবশ্যই ইউনিক (অদ্বিতীয়)।
- গঠন: কী এর মাধ্যমে ভ্যালু সংরক্ষণ করা হয় এবং কীগুলোর উপর ভিত্তি করে সাজানো থাকে।
উদাহরণ (std::map):
#include <iostream>
#include <map>
int main() {
std::map<std::string, int> ages;
// মান যোগ করা
ages["John"] = 25;
ages["Alice"] = 30;
ages["Bob"] = 22;
// মান অ্যাক্সেস করা
std::cout << "Alice's age: " << ages["Alice"] << std::endl;
// কী-ভ্যালু জোড়া প্রিন্ট করা
for (const auto& pair : ages) {
std::cout << pair.first << ": " << pair.second << std::endl;
}
return 0;
}আউটপুট:
Alice's age: 30
Alice: 30
Bob: 22
John: 25এখানে, std::map কীগুলোর উপর ভিত্তি করে সাজানো হয়েছে এবং প্রতিটি কী একটি মানের সাথে সংযুক্ত।
৩. std::multiset
std::multiset হল একটি অ্যাসোসিয়েটিভ কনটেইনার যা অদ্বিতীয় নয় এমন উপাদান সংরক্ষণ করতে দেয়। এটি ডুপ্লিকেট মান অনুমোদন করে এবং উপাদানগুলো স্বয়ংক্রিয়ভাবে সাজানো থাকে। std::set এর মতোই, তবে এতে ডুপ্লিকেট উপাদান থাকতে পারে।
- পার্থক্য: ডুপ্লিকেট উপাদানসমূহ অনুমোদন করে, তবে উপাদানগুলো সাজানো থাকে।
- গঠন: কীগুলোর উপর ভিত্তি করে সাজানো থাকে এবং মানের ডুপ্লিকেট থাকতে পারে।
উদাহরণ (std::multiset):
#include <iostream>
#include <set>
int main() {
std::multiset<int> numbers;
// সেটে উপাদান যোগ করা
numbers.insert(5);
numbers.insert(2);
numbers.insert(5);
numbers.insert(8);
numbers.insert(3);
// সেটের উপাদান প্রিন্ট করা
for (int num : numbers) {
std::cout << num << " ";
}
return 0;
}আউটপুট:
2 3 5 5 8এখানে, 5 দুটি বার ইনসার্ট হওয়ার পরেও সেটে দুইবার উপস্থিত রয়েছে, কারণ std::multiset ডুপ্লিকেট মান গ্রহণ করে।
৪. std::multimap
std::multimap হল একটি অ্যাসোসিয়েটিভ কনটেইনার যা কী-ভ্যালু জোড়া সংরক্ষণ করে, এবং এটি ডুপ্লিকেট কী অনুমোদন করে। এটি মূলত std::map এর মতো, তবে এতে একই কী এর জন্য একাধিক মান থাকতে পারে।
- পার্থক্য: একই কী এর জন্য একাধিক মান থাকতে পারে।
- গঠন: কী-ভ্যালু জোড়া সাজানো থাকে এবং কী এর জন্য একাধিক মান থাকতে পারে।
উদাহরণ (std::multimap):
#include <iostream>
#include <map>
int main() {
std::multimap<std::string, int> grades;
// মান যোগ করা
grades.insert({"John", 85});
grades.insert({"Alice", 90});
grades.insert({"John", 88});
grades.insert({"Bob", 92});
grades.insert({"Alice", 95});
// কী-ভ্যালু জোড়া প্রিন্ট করা
for (const auto& pair : grades) {
std::cout << pair.first << ": " << pair.second << std::endl;
}
return 0;
}আউটপুট:
Alice: 90
Alice: 95
Bob: 92
John: 85
John: 88এখানে, John এবং Alice এর জন্য একাধিক গ্রেড রয়েছে, কারণ std::multimap ডুপ্লিকেট কী অনুমোদন করে।
পার্থক্য সারণী
| Container | Key | Duplicates | Order |
|---|---|---|---|
std::set | Single | No | Sorted (ascending by default) |
std::map | Single | No | Sorted by key |
std::multiset | Single | Yes | Sorted (ascending by default) |
std::multimap | Single | Yes | Sorted by key |
উপসংহার
std::set: ইউনিক উপাদান সংরক্ষণ করে এবং উপাদানগুলো সাজানো থাকে।std::map: ইউনিক কী-ভ্যালু জোড়া সংরক্ষণ করে, এবং কীগুলোর উপর ভিত্তি করে সাজানো থাকে।std::multiset: ডুপ্লিকেট উপাদান অনুমোদন করে এবং উপাদানগুলো সাজানো থাকে।std::multimap: ডুপ্লিকেট কী অনুমোদন করে এবং কীগুলোর উপর ভিত্তি করে সাজানো থাকে।
এই কনটেইনারগুলো বিভিন্ন ক্ষেত্রে ব্যবহার করা যায় যেখানে ডেটা সঞ্চয় ও অনুসন্ধানের প্রয়োজন এবং ডেটাকে সাজানো রাখতে হবে।
Read more