mutimap和map基本用法都是一样的,map中键值对中的键是唯一的,而mutimap中的键可以重复。mutimap在现实中也是很常用的,比如部门和员工的关系。mutimap和map的头文件都是
#include <iostream>
#include <map>
#include <string>
using namespace std;
class Person
{
public:
string m_name;
int m_age;
};
int main()
{
//部门和员工映射
Person p1, p2, p3, p4, p5;
p1.m_name = "张三";
p1.m_age = 31;
p2.m_name = "张四";
p2.m_age = 32;
p3.m_name = "张五";
p3.m_age = 33;
p4.m_name = "张六";
p4.m_age = 34;
p5.m_name = "张七";
p5.m_age = 35;
multimap<string, Person> mp;
mp.insert(make_pair("销售部",p1));
mp.insert(make_pair("销售部", p2));
mp.insert(make_pair("开发部", p3));
mp.insert(make_pair("开发部", p4));
mp.insert(make_pair("财务部", p5));
//查询开发部所有人员
int num = mp.count("开发部");
int i = 0;
multimap<string, Person>::iterator iter_result = mp.find("开发部");
while(iter_result != mp.end() && i<num)
{
cout << iter_result->first << ":" << iter_result->second.m_name << endl;
++iter_result;
++i;
}
//查询开发部所有人员第二种方法,推荐使用这种方法
auto begin = mp.lower_bound("开发部");
auto end = mp.upper_bound("开发部");
for (auto iter = begin; iter != end;++iter)
{
cout << iter->first << ":" << iter->second.m_name << endl;
}
//给34岁以上的,名字后加一个 "+W“
multimap<string, Person>::iterator iter = mp.begin();
for (;iter != mp.end();++iter)
{
if(iter->second.m_age >= 34)
{
iter->second.m_name += "+W";
}
}
cout << "结果为:" << endl;
//遍历
for (iter = mp.begin(); iter != mp.end(); ++iter)
{
cout << iter->first << ":" << iter->second.m_name << endl;
}
system("pause");
}