আমি দেখতে পেয়েছি যে তাদের একটি কী এবং একাধিক মান রয়েছে যা অনন্য।
উত্তর:
মাল্টিম্যাপে জোড়া (কী, মান) যুক্ত থাকে যেখানে কী এবং মান উভয়ই বেশ কয়েকবার প্রদর্শিত হতে পারে।
map<key, set<value>>
শুধুমাত্র একটি নির্দিষ্ট কী-এর জন্য একবার প্রতিটি মান সংরক্ষণ করবে। এটি করতে, এটি কেবল কীগুলি নয়, মানগুলির তুলনা করতে সক্ষম হবে।
এটি আপনার প্রয়োগের উপর নির্ভর করে যদি সমান তুলনা করা মানগুলি সমতুল্য হয়, বা আপনি যেভাবে সেগুলি আলাদাভাবে সঞ্চয় করতে চান। সম্ভবত তাদের ক্ষেত্রগুলি পৃথক পৃথক তবে সেটের তুলনায় অংশ নেন না।
std::multimap<key, value>
একই কীটি একাধিকবার প্রদর্শিত হতে দেয় যেখানে std::map<key, whatever>
এর স্বতন্ত্রতা প্রয়োজন key
।
এ std::map
হ'ল একটি সাহসী ধারক, এটি আপনাকে আপনার টাইপ মানের সাথে একটি অনন্য কী যুক্ত করতে দেয়। উদাহরণ স্বরূপ,
void someFunction()
{
typedef std::map<std::string, int> MapType;
MapType myMap;
// insertion
myMap.insert(MapType::value_type("test", 42));
myMap.insert(MapType::value_type("other-test", 0));
// search
auto it = myMap.find("test");
if (it != myMap.end())
std::cout << "value for " << it->first << " is " << it->second << std::endl;
else
std::cout << "value not found" << std::endl;
}
A std::multimap
এর সমান std::map
, তবে আপনার কীগুলি আর অনন্য নয়। সুতরাং আপনি কেবল একটি অনন্য আইটেম সন্ধানের পরিবর্তে আইটেমের বিস্তৃত সন্ধান করতে পারেন। উদাহরণ স্বরূপ,
void someFunction()
{
typedef std::multimap<std::string, int> MapType;
MapType myMap;
// insertion
myMap.insert(MapType::value_type("test", 42));
myMap.insert(MapType::value_type("test", 45));
myMap.insert(MapType::value_type("other-test", 0));
// search
std::pair<auto first, auto second> range = myMap.equal_range("test");
for (auto it = range.first; it != range.second; ++it)
std::cout << "value for " << it->first << " can be " << it->second << std::endl;
}
std::set
একটি মত হল std::map
, কিন্তু এটা একটা মান যুক্ত একটি কী সংরক্ষণকারী করা হয় না। এটি কেবলমাত্র মূল ধরণের সঞ্চয় করে এবং আপনাকে আশ্বাস দেয় যে এটি সেটের মধ্যে অনন্য।
আপনারও আছে std::multiset
, এটি একই ধাঁচ অনুসরণ করে।
এই সমস্ত পাত্রে তাদের সন্ধান / সমান_আরঞ্জের সাথে একটি ও (লগ (এন)) অ্যাক্সেস সরবরাহ করে।
std::pair<auto first, auto second> range = myMap.equal_range("test");
কাজ করে না, কারণ error: 'auto' not allowed in template argument
। const auto range = myMap.equal_range("test")
পরিবর্তে ব্যবহার করুন।
map::insert
কারণ map
পাত্রে ডুপ্লিকেট চাবি মানের জন্য অনুমতি দেয় না, প্রতিটি উপাদানের জন্য সন্নিবেশ অপারেশন চেক সন্নিবেশিত অন্য উপাদান একই কী মান কন্টেইনারে আগে থেকেই আছে কিনা যদি তাই হয়, উপাদান সন্নিবেশিত করা হয় না এবং তার ম্যাপ মান কোন ভাবেই পরিবর্তন করা হয়।
অন্য দিকে
multimap::insert
একই কী দিয়ে যে কোনও সংখ্যক আইটেম সন্নিবেশ করতে পারে।
http://www.cplsplus.com/references/stl/map/
http://www.cplsplus.com/references/stl/multmap/
পরেরটির প্রয়োজন হয় যে মানগুলি অর্ডার করা যায় (হয় operator<
বা একটি তুলনা-ফাংশন মাধ্যমে ), পূর্ববর্তীটি তা করে না।
T
যাতে কোনও অর্ডার নেই। আপনি এটি তৈরিতে ব্যবহার করতে পারেন std::multimap<U, T>
, তবে আপনি এটি তৈরিতে ব্যবহার করতে পারবেন না std::map<U, std::set<T> >
।