تفاوت کلاس های map,multimap - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

تفاوت کلاس های map,multimap

+1 امتیاز
سلام.

تفاوت کلاس های map و multimap چه تفاوتی دارند ؟اصلا چه زمانی از map استفاده می کنیم؟
سوال شده اردیبهشت 30, 1399  بوسیله ی AliStar (امتیاز 164)   2 20 32

2 پاسخ

+1 امتیاز

سلام؛ برای وقتی که بخوایم یک سری داده‌ای بر اساس کلیدهایی رو داشته باشید، مثلاً یک ساختاری مثل Json. در std::map شما نمی‌تونید که کلید تکراری داشته باشید ولی در std::mulimap این اجازه به شما داده میشه.

 

به نقل از cppreferences:

Multimap is an associative container that contains a sorted list of key-value pairs, while permitting multiple entries with the same key. Sorting is done according to the comparison function  Compare, applied to the keys. Search, insertion, and removal operations have logarithmic complexity.

پاسخ داده شده اردیبهشت 31, 1399 بوسیله ی mg_ramezani (امتیاز 727)   1 1 12
+1 امتیاز
  • std::multimap جفت های (کلید ، مقدار) را ذخیره می کند که در آن کلید و مقدار می توانند چندین بار ظاهر شوند
  • std::map فقط هر مقدار را یک بار برای یک کلید خاص ذخیره می کند. برای این کار باید مقادیر را مقایسه کرد ، نه کلیدها
  • td::map یک حافظه انجمنی است که به شما امکان می دهد یک کلید منحصر به فرد در ارتباط با مقدار نوع خود داشته باشید
 
مثال استفاده از std::map در C++:
void someFunction()
{
// declare Map
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;
}

 

مثال استفاده از std::multimap در C++:
 
void someFunction()
{
// declare Multimap
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 :: multimap برابر است با std::map اما کلیدهای شما دیگر منحصر به فرد نیستند. بنابراین می توانید به جای اینکه یک مورد منحصر به فرد را پیدا کنید ، طیف وسیعی از موارد را پیدا کنید.

 
 
پاسخ داده شده خرداد 22, 1399 بوسیله ی ثریا (امتیاز 126)   6 24 30
...