C++ STL 之 multimap案例之员工分组
#include <iostream>
#include <vector>
#include <map>
#include <string>
#include <time.h>
#include <stdlib.h>
using namespace std; #define SALE_DEPATMENT 1 // 销售部门
#define DEVELOP_DEPATMENT 2 // 研发部门
#define FINACIAL_DEPATMENT 3 // 财务部门 // multimap 案例
// 公司今天招聘了 5 个员工, 5 名员工进入公司之后,需要指派员工在那个部门工作
// 人员信息有: 姓名 年龄 电话 工资等组成
// 通过 Multimap 进行信息的插入 保存 显示
// 分部门显示员工信息 显示全部员工信息 class Worker
{
public:
string mName;
string mTele;
int mAge;
int mSalary;
}; // 创建员工
void Create_Worker(vector<Worker>& vWorker)
{
string seedName = "ABCDE";
for (int i = ; i < ; i++)
{
Worker worker;
worker.mName = "员工";
worker.mName += seedName.at(i);
worker.mAge = rand() % + ;
worker.mTele = "010-88888888";
worker.mSalary = rand() % + ;
// 保存员工信息
vWorker.push_back(worker);
}
} // 员工分组
void WorkerByGroup(vector<Worker>& vWorker, multimap<int, Worker>& workeGroup)
{
// 把员工随机分配到不同部门
srand(time(NULL));
for (vector<Worker>::iterator it = vWorker.begin(); it != vWorker.end(); it++)
{
int departID = rand() % + ;
switch (departID)
{
case SALE_DEPATMENT:
workeGroup.insert(make_pair(SALE_DEPATMENT, *it));
break;
case DEVELOP_DEPATMENT:
workeGroup.insert(make_pair(DEVELOP_DEPATMENT, *it));
break;
case FINACIAL_DEPATMENT:
workeGroup.insert(make_pair(FINACIAL_DEPATMENT, *it));
break;
default:
break;
}
}
} void showGroupWorkers(multimap<int, Worker>& workerGroup, int departID)
{
// find(key);//查找键 key 是否存在,若存在,返回该键的元素的迭代器;/若不存在,返回 map.end();
multimap<int, Worker>::iterator it = workerGroup.find(departID);
// 找当前部门总人数
// count(keyElem);//返回容器中 key 为 keyElem 的对组个数。对 map 来说,要么是 0,要么是 1。对multimap 来说,值可能大于 1。
int Departcount = workerGroup.count(departID);
int num = ;
for (multimap<int, Worker>::iterator pos = it; it != workerGroup.end() && num < Departcount; pos++, num++)
{
cout << "姓名:" << pos->second.mName << " 年龄:" << pos->second.mAge << " 电话:" << pos->second.mTele << " 工资:" << pos->second.mSalary << endl;
}
} // 打印每一部分员工信息
void PrintWorkerByGroup(multimap<int, Worker>& workerGroup)
{
// 打印销售部门员工信息
cout << "销售部门:" << endl;
showGroupWorkers(workerGroup, SALE_DEPATMENT);
// 打印研发部门员工信息
cout << "研发部门:" << endl;
showGroupWorkers(workerGroup, DEVELOP_DEPATMENT);
// 打印财务部门员工信息
cout << "财务部门:" << endl;
showGroupWorkers(workerGroup, FINACIAL_DEPATMENT);
} int main()
{
// 存放新员工信息
vector<Worker> vWorker;
// multimap保存分组信息
multimap<int, Worker> workerGroup;
// 创建员工
Create_Worker(vWorker);
// 员工分组
WorkerByGroup(vWorker, workerGroup);
// 打印员工信息
PrintWorkerByGroup(workerGroup);
getchar();
return ;
}
C++ STL 之 multimap案例之员工分组的更多相关文章
- [代码]multimap员工分组案例
案例要求: //multimap 案例//公司今天招聘了 5 个员工,5 名员工进入公司之后,需要指派员工在那个部门工作//人员信息有: 姓名 年龄 电话 工资等组成//通过 Multimap 进行信 ...
- 2.9 C++STL map/multimap容器详解
文章目录 2.9.1 引入 2.9.2 代码示例 map案列 multimap案列 2.9.3 代码运行结果 总结 2.9.1 引入 map相对于set区别,map具有键值和实值,所有元素根据键值自动 ...
- QL查询案例:取得分组 TOP-N
[转]SQL查询案例:取得分组 TOP-N CREATE TABLE TopnTest ( name VARCHAR(10), --姓名 procDate DATETIME, ...
- STL之multimap
参见http://www.cplusplus.com/reference/map/multimap/ 多重映射multimap和map映射很相似,但是multimap允许重复的关键字,这使得multi ...
- STL::map/multimap
map: 默认根据 key 排序(从小到大),能够通过 backet operator(operator [ ]) 来获取元素,内部由二叉搜索树来实现(binary search trees). mu ...
- elasticsearch聚合案例--分组、求最大值再求最大值的均值
一.需求 A.B.C代表3个用户,第二列代表各自的得分,求A.B.C的最好成绩以及A.B.C最好成绩的均值 A 10 A 11 A 13 B 11 B 11 B 12 C 10 C 10 C 11 C ...
- C++ STL 学习笔记__(8)map和multimap容器
10.2.9 Map和multimap容器 map/multimap的简介 ² map是标准的关联式容器,一个map是一个键值对序列,即(key,value)对.它提供基于key的快速检索能力. ² ...
- c++复习:STL之容器
1 STL的string 1 String概念 string是STL的字符串类型,通常用来表示字符串.而在使用string之前,字符串通常是用char*表示的.string与char*都可以用来表示字 ...
- C++进阶 STL(2) 第二天 一元/二元函数对象、一元/二元谓词、stack容器、queue容器、list容器(双向链表)、set容器、对组、map容器
01 上次课程回顾 昨天讲了三个容器 string string是对char*进行的封装 vector 单口容器 动态数组 deque(双端队列) 函数对象/谓词: 一元函数对象: for_each ...
随机推荐
- Android 显示系统:OpenGL简介和Gralloc代码分析
一.OpenGL ES与EGL Android的GUI系统是基于OpenGL/EGL来实现的. 由于OpenGL是通用函数库,在不同平台系统上需要被“本土化”——把它与具体平台的窗口系统建立起关联,F ...
- js常用正则(2)
res(a, b, str) { //数字加英文 let re = `\^\\w{${a},${b}}\$` let reg = new RegExp(re); let status = !reg.t ...
- multiprocessing.Pool报pickling error
multiprocessing.Pool报pickling error 现象 multiprocessing.Pool传递一个普通方法(不在class中定义的)时, 能正常工作. from multi ...
- JAXB序列化对象与反序列化XML
1.什么是JAXB JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术. 该过程中,JAXB也提供 ...
- 安装完 MySQL 后必须调整的 10 项配置(转)
当我们被人雇来监测MySQL性能时,人们希望我们能够检视一下MySQL配置然后给出一些提高建议.许多人在事后都非常惊讶,因为我们建议他们仅仅改动几个设置,即使是这里有好几百个配置项.这篇文章的目的在于 ...
- Ubuntu14.04中stopping log initial device creation错误或自动挂载错误失败(导致系统无法自动启动)
出现问题的原因: 图一 出现问题的界面: 图二 按esc,无作用. 图三 按esc,按i,依然无作用. 图四 解决方法: (1)按esc,i无用, 在图2按s成功到登陆界面. (2)桌面修改为dis ...
- 微信demo小游戏:飞机大战从无到有
微信demo游戏飞机大战从无到有 现在创建新项目会默认给飞机大战的demo,这里给大家从基础开始讲解游戏的从无到有是怎么实现的. 具体实现步骤: 创建背景图->背景图运动起来->创建飞机并 ...
- flask上下管理文相关 - 总结
flask上下管理文相关 - 总结 flask上下文管理机制 当用户请求到来之后,flask内部会创建两个对象: ctx = ReqeustContext(),内部封装request/sesion a ...
- Encoding.GetEncoding 编码列表
代码页 名称 显示名称 37 IBM037 IBM EBCDIC(美国 - 加拿大) 437 IBM437 OEM 美国 500 IBM500 IBM EBCDIC(国际) 708 A ...
- [LuoguP2157][SDOI2009]学校食堂_状压dp
学校食堂 题目链接:https://www.luogu.org/problem/P2157 数据范围:略. 题解: 发现$B$特别小,很容易想到状压. 即在$dp$的时候弄出来$f_{(i,j,k)} ...