map和set我们之前介绍过了,现在通过对比说明一下map与multimap,set与multiset
首先map的插入操作,不能插入已经存在的键值,若插入已经存在的键值,则插入无效,可应通过相应的办法来解决:
void TestMap()
{
map<string, string> dict;
//[]能修改已存在键值的实值
dict["left"] = "左边";
dict["left"] = "剩余";
//insert不能修改已存在键值的实值
dict.insert(pair<string, string>("even", "甚至"));
dict.insert(pair<string, string>("even", "偶数"));
//通过迭代器修改已存在键值的实值
dict.insert(pair<string, string>("sort", "xxx"));
pair<map<string, string>::iterator, bool> ret;
ret = dict.insert(pair<string, string>("sort", "排序"));
ret.first->second = "排序";
map<string, string>::const_iterator Itdict = dict.begin();
while (Itdict != dict.end())
{
cout << Itdict->first << ":" << Itdict->second << endl;
++Itdict;
}
}
结果为:
multimap能够插入与已存在数据相同键值的数据:
void TestMultimap()
{
multimap<string, string>dict;
dict.insert(pair<string, string>("left", "左边"));
dict.insert(pair<string, string>("left", "剩余"));
multimap<string, string>::iterator ItDict = dict.begin();
while (ItDict != dict.end())
{
cout << ItDict->first << ":" << ItDict->second << endl;
++ItDict;
}
}
结果为:
set与map一样不能插入与已经存在的数据,而且set只有一个键值,没有重载[]
void TestSet()
{
set<int> s;
s.insert(0);
s.insert(1);
s.insert(2);
s.insert(0);
set<int>::iterator ItS = s.begin();
while(ItS!=s.end())
{
cout << *ItS << " ";
ItS++;
}
cout << endl;
}
结果为:
multiset能插入相同的元素
void TestMultiset()
{
multiset<int> s;
s.insert(0);
s.insert(1);
s.insert(2);
s.insert(0);
multiset<int>::iterator ItS = s.begin();
while (ItS != s.end())
{
cout << *ItS << " ";
ItS++;
}
cout << endl;
}
结果为: