map容器的特点:
1、所有元素都会根据元素的键值自动排序
2、所有的元素都是pair,同时拥有键值和实值。
第一个参数:键值 第二个参数:实值
map几种插入方式和遍历
对组实现,.first .second
#include <iostream>
#include<map>
#include<string>
#include<algorithm>
using namespace std;
void PrintMap01(map<int,string>&m)
{
for(map<int,string>::const_iterator it=m.begin();it!=m.end();it++)
{
cout<<(*it).first<<" "<<(*it).second<<endl;
}
}
void test01()
{
//存放9527--"星爷" 10086-"移动" 10010--"联通" 10000--"电信"
//int为键值的类型 string为实值的类型
map<int,string> m;
m.insert(pair<int,string>(9527,"星爷"));
m.insert(make_pair(10086,"移动"));
m.insert(map<int,string>::value_type(10010,"联通"));
m[1000]="电信";//读map的时候推荐
//m[10] 寻找key为10的实值
//但是:如果容器中没有key为10 使用m[10] 会创建一个key为10实值为空的 对组
//如果容器中有key为10 那么m[10]代表key=10的实值
//建议:10是存在的
cout<<m[10]<<endl;
PrintMap01(m);
cout<<m[9527]<<endl;//只想查看key==9527 的实值 (保证key是存在的)
//如果不能确定key值是否存在
map<int,string>::const_iterator ret;
ret=m.find(10086);
if(ret==m.end())
{
cout<<"没有找到"<<endl;
}
else
{
cout<<(*ret).first<<" "<<(*ret).second<<endl;
}
}
map和vector容器配合使用(重要)
LOL职业联赛:有4个战队 随机抽签出场 请打印出场顺序
#include<numeric>
#include<time.h>
#include<stdlib.h>
void test02()
{
srand(time(NULL));
//战队容器(战队编号,战队名称)
map<int,string>m;
m.insert(make_pair(1,"RNG"));
m.insert(make_pair(2,"IG"));
m.insert(make_pair(3,"WE"));
m.insert(make_pair(4,"EDG"));
//使用vector存放战队编号
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);
//随机抽签(洗牌) 打乱容器的元素顺序
random_shuffle(v.begin(),v.end());
//随机出场
for_each(v.begin(),v.end(),[&](int val){//传引用
cout<<m[val]<<"战队出场了"<<endl;
});
}
multimap容器
multimap允许key相同,map不允许key相同
void test03()
{
map<int,string> m;
m.insert(make_pair(1,"RNG"));
m.insert(make_pair(1,"IG"));
cout<<m.count(1)<<endl;//1
multimap<int,string> m1;
m1.insert(make_pair(1,"RNG"));
m1.insert(make_pair(1,"IG"));
cout<<m1.count(1)<<endl;//2
}
案例:5名员工 加入3个部门
公司今天招聘了 5 个员工,5 名员工进入公司之后,需要指派员工在那个部门工作 人员信息有: 姓名 年龄 电话 工资等组成
通过 Multimap 进行信息的插入 保存 显示 分1.2.3部门显示员工信息 显示全部员工信息
- switch用法
- 用vector存放person信息
- 用multimap存放<部门号int,person>
- m.count计数规定打印次数
- lamba表达式[&]
#include <vector>
class Person
{
public:
string name;
int age;
Person(string name,int age) {
this->name=name;
this->age=age;
}
};
void createPersonVector(vector<Person>&v)
{
v.push_back(Person("员工A",21));
v.push_back(Person("员工B",23));
v.push_back(Person("员工C", 21));
v.push_back(Person("员工D", 22));
v.push_back(Person("员工E", 21));
}
void PersonByGroup(vector<Person>&v,multimap<int,Person>&m)
{
for(vector<Person>::iterator it=v.begin();it!=v.end();it++)
{
cout<<"请输入"<<(*it).name<<"将要加入的部门:1 2 3"<<endl;
int operate=0;
cin>>operate;
if(operate>=1&&operate<=3)
{
m.insert(make_pair(operate,*it));
}
}
}
void showPersonList(multimap<int,Person>&m,int op)
{
switch (op) {
case 1:
cout<<"研发部"<<endl;
break;
case 2:
cout<<"测试部"<<endl;
break;
case 3:
cout<<"人事部"<<endl;
break;
}
int n=m.count(op);
cout<<"部门的人数个数:"<<n<<endl;
multimap<int,Person>::const_iterator ret;
ret=m.find(op);
if(ret!=m.end())
{
for(int i=0;i<n;i++,ret++)
{
cout<<"name="<<(*ret).second.name<<",age="<<(*ret).second.age<<endl;
}
}
}
void test04()
{
vector<Person>v;//使用vector容器将员工信息存储起来
createPersonVector(v);//创建5名员工
multimap<int,Person>m;//存放员工<部门号、员工信息>
PersonByGroup(v,m);//分部门
//按部门查看员工信息
showPersonList(m, 1);
showPersonList(m, 2);
showPersonList(m, 3);
}