multimap 案例及代码

本文详细介绍了C++中的multimap容器,通过实例展示了如何插入、查找、删除元素,以及遍历multimap的方法,揭示了其在处理多对一映射关系时的用途。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    #include<iostream>
    using namespace std;
    
    #include<string.h>
    #include<vector>
    #include<map>
    #include <stdlib.h>
    #include <ctime>
    
    //multimap 案例
    //公司招聘了5个员工,5个员工进入公司之后,需要指派员工在哪个部门工作
    //人员信息有:姓名 年龄 电话工资等组成
    //通过 multimap 进行信息的 插入 保存 显示
    //分部门显示员工信息  显示全部员工信息
    
    
    enum {
        RENLI,YANFA,MEISHU
    };
    
    class Worker {
    	public:
    		Worker();
    		~Worker();
    
    
    		string m_Name;
    		int m_Money;
    };
    
    Worker::Worker() {
    
    }
    
    Worker::~Worker() {
    
    }
    
    void creatWorker(vector<Worker>&v) {
    	string nameSeed = "ABCDE";
    	for (int i = 0; i < 5; i++) {
    		string name = "员工";
    		name += nameSeed[i];
    
    		int money = rand() % 10000 + 10000;//10000~19999
    
    		Worker w;
    		w.m_Name = name;
    		w.m_Money = money;
    		v.push_back(w);
    	}
    
    
    }
    
    void setGroup(vector<Worker>&v,multimap<int,Worker>&m) {
    	for(vector<Worker>::iterator it=v.begin() ; it!=v.end(); it++) {
    		//随机产生部门编号
    		int departmentId= rand()%3;//0 1 2
    		//将员工分到mulimap 容器中
    		m.insert(make_pair(departmentId,*it));
    
    	}
    }
    
    void showGroup(multimap<int,Worker>&m) {
    	//人力部门的显示
    	cout<<"人力部门员工如下:"<<endl;
    
    	multimap<int,Worker>::iterator pos=m.find(RENLI);
    	int index=0;
    	int num=m.count(RENLI);
    	for(; pos!=m.end(),index<num; pos++,index++) {
    		cout<<"name:"<<pos->second.m_Name<<"	money:"<<pos->second.m_Money<<endl;
    	}
    	cout<<"----------------------------------------"<<endl;
    	cout<<"研发部门员工如下:"<<endl;
    
    
    	pos=m.find(YANFA);
    	index=0;
    	num=m.count(YANFA);
    	for(; pos!=m.end(),index<num; pos++,index++) {
    		cout<<"name:"<<pos->second.m_Name<<"	money:"<<pos->second.m_Money<<endl;
    	}
    
    	cout<<"----------------------------------------"<<endl;
    	cout<<"美术部门员工如下:"<<endl;
    
    
    	pos=m.find(MEISHU);
    	index=0;
    	num=m.count(MEISHU);
    	for(; pos!=m.end(),index<num; pos++,index++) {
    		cout<<"name:"<<pos->second.m_Name<<"	money:"<<pos->second.m_Money<<endl;
    	}
    	cout<<"----------------------------------------"<<endl;
    
    }
    
    int main() {
    
    	srand((unsigned int )time(NULL)) ;
    
    	//声明一个容器存放员工
    	vector<Worker>v;
    
    	//创建5名员工
    	creatWorker(v);
    
    	//设置分组
    	//分组的multimap容器
    	multimap <int,Worker>m;
    	setGroup(v,m);
    
    	//分部门显示员工
    	showGroup(m);
    
    	//员工创建测试
    //	for (vector<Worker>::iterator it = v.begin(); it != v.end(); it++)
    //	{
    //		cout << "name:" << it->m_Name << " money:" << it->m_Money << endl;
    //	}
    	system("pause");
    	return 0;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值