multimap 是关联容器,含有键值对的已排序列表,其功能与map一样,唯一不同的是,它容许多个元素拥有同一键。本篇学习map的创建,初始化,赋值操作operator=, empty,size,max_size
示例代码:
#include <iostream>
#include <map>
#include <string>
using namespace std;
void multimapInit()
{
string str = "《凉州词(王翰)》 葡萄美酒夜光杯,欲饮琵琶马上催。醉卧沙场君莫笑,古来征战几人回? ";
//1.创建multimap
multimap<int, string> multimap1;
cout << "multimap1.size = " << multimap1.size() << " multimap1.empty = " << multimap1.empty() << " multimap1.max_size = " << multimap1.max_size() << endl;
multimap1.insert({1, "persimmon柿子"});
multimap1.insert({5, "lichee荔枝"});
multimap1.insert({3, "longan龙眼"});
multimap1.insert({4, "loquat枇杷"});
multimap1.insert({3, "shaddock柚子"});
multimap1.insert({2, "persimmon柿子"});
cout << "multimap1.size = " << multimap1.size() << " multimap1.empty = " << multimap1.empty() << " multimap1.max_size = " << multimap1.max_size() << endl;
cout << "multimap1的值为:" << endl;
multimap<int, string>::iterator iter1;
for(iter1 = multimap1.begin(); iter1 != multimap1.end(); iter1++)
{
std::string tempStr = iter1->second;//这样可以
cout << iter1->first << ": " << iter1->second << endl;//为什么不能这样输出,加上头文件#include<string>才可以
//cout << iter1->first << ": " << iter1->second.c_str() << endl;
}
//2.列表初始化
multimap<int, string> multimap2 = {
{4, "megranate石榴" },
{2, "durian榴莲" },
{6, "mangosteen山竹" },
{2, "mango芒果" },
{3, "papaya木瓜" },
{1, "papaya木瓜"}
};
cout << "multimap2.size = " << multimap2.size() << " multimap2.empty = " << multimap2.empty() << " multimap2.max_size = " << multimap2.max_size() << endl;
cout << "multimap2的值为:" << endl;
for(auto &val: multimap2)
{
cout << val.first << ": " << val.second << endl;
}
//3.赋值初始化
multimap<int, string> multimap3 = multimap2;
multimap<int, string>::iterator iter3 = multimap3.begin();
cout << "multimap3.size = " << multimap3.size() << " multimap3.empty = " << multimap3.empty() << " multimap3.max_size = " << multimap3.max_size() << endl;
cout << "multimap3的值为:" << endl;
while (iter3 != multimap3.end())
{
cout << iter3->first << ": " << iter3->second << endl;
iter3++;
}
//4.拷贝初始化
multimap<int, string> multimap4(multimap1);
cout << "multimap4.size = " << multimap4.size() << " multimap4.empty = " << multimap4.empty() << " multimap4.max_size = " << multimap4.max_size() << endl;
auto iter4 = multimap4.begin();
cout << "multimap4的值为:" << endl;
while (iter4 != multimap4.end())
{
cout << iter4->first << ": " << iter4->second << endl;
iter4++;
}
//5.范围初始化
multimap<int, string> multimap5(multimap2.begin(), multimap2.end());
cout << "multimap5.size = " << multimap5.size() << " multimap5.empty = " << multimap5.empty() << " multimap5.max_size = " << multimap5.max_size() << endl;
auto iter5 = multimap5.begin();
cout << "multimap5的值为:" << endl;
while (iter5 != multimap5.end())
{
cout << iter5->first << ": " << iter5->second << endl;
iter5++;
}
//6.移动构造函数
multimap<int, string> multimap6(std::move(multimap1));
cout << "multimap6.size = " << multimap6.size() << " multimap6.empty = " << multimap6.empty() << " multimap6.max_size = " << multimap6.max_size() << endl;
auto iter6 = multimap6.begin();
cout << "multimap6的值为:" << endl;
while (iter6 != multimap6.end())
{
cout << iter6->first << ": " << iter6->second << endl;
iter6++;
}
}
int main()
{
multimapInit();
cout << "Hello, world!" << endl;
return 0;
}
运行结果:
参考: