C++进阶实例2--员工分组

  1. 1 #include<iostream>
  2. 2 #include<map>
  3. 3 #include<vector>
  4. 4 #include<ctime>
  5. 5 using namespace std;
  6. 6
  7. 7 #define CEHUA 0
  8. 8 #define MEISHU 1
  9. 9 #define YANFA 2
  10. 10
  11. 11 // 员工分组
  12. 12 //
  13. 13 // 案例描述:
  14. 14 // 1. 10名员工(ABCDEFGHIJ)
  15. 15 // 2. 员工信息:姓名,薪资组成;部门:策划、没熟、研发
  16. 16 // 3. 随机给10名员工分配部门和薪资
  17. 17 // 4. 通过multimap进行信息的插入,key(部门编号),value(员工)
  18. 18 // 5. 分部门显示员工信息
  19. 19 //
  20. 20 // 解决思路:
  21. 21 // 1. 创建10名员工,存入vector
  22. 22 // 2. 遍历vector容器,取出每个员工,进行随机分组
  23. 23 // 3. 分组后,将员工编号作为key,具体员工为value,存放到multimap容器中
  24. 24 // 4. 分部门显示员工信息
  25. 25 //
  26. 26
  27. 27 // 创建员工
  28. 28 class Worker
  29. 29 {
  30. 30 public:
  31. 31 string m_Name;
  32. 32 int m_Salary;
  33. 33 };
  34. 34
  35. 35 void createWorker(vector<Worker>& v) {
  36. 36
  37. 37 string nameSeed = "ABCDEFGHIJ";
  38. 38 for (int i = 0; i < 10; i++) {
  39. 39 Worker worker;
  40. 40 worker.m_Name = "员工";
  41. 41 worker.m_Name += nameSeed[i];
  42. 42
  43. 43 worker.m_Salary = rand() % 10000 + 10000; // 10000 ~ 19999;
  44. 44
  45. 45 v.push_back(worker);
  46. 46 }
  47. 47
  48. 48 }
  49. 49
  50. 50 // 员工分组
  51. 51 void setGroup(vector<Worker>& v, multimap<int, Worker>& m) {
  52. 52 for (vector<Worker>::iterator it = v.begin(); it != v.end(); it++) {
  53. 53 // 产生随机部门编号
  54. 54 int depId = rand() % 3; // 0, 1, 2
  55. 55
  56. 56 // 将员工插入到分组中
  57. 57 // key表示部门编号,value表示具体员工
  58. 58 m.insert(make_pair(depId, *it));
  59. 59 }
  60. 60 }
  61. 61
  62. 62 // 分组显式
  63. 63 void showWorkerByGroup(multimap<int, Worker>&m) {
  64. 64
  65. 65 cout << "策划部们:" << endl;
  66. 66 multimap<int, Worker>::iterator pos = m.find(CEHUA);
  67. 67 int count = m.count(CEHUA); // 统计具体人数
  68. 68 int index = 0;
  69. 69 for (; pos != m.end() && index < count; pos++, index++) {
  70. 70 cout << "姓名:" << pos->second.m_Name << " 薪资:" << pos->second.m_Salary << endl;
  71. 71 }
  72. 72
  73. 73 cout << "-----------------------" << endl;
  74. 74 cout << "美术部门:" << endl;
  75. 75 pos = m.find(MEISHU);
  76. 76 count = m.count(MEISHU); // 统计具体人数
  77. 77 index = 0;
  78. 78 for (; pos != m.end() && index < count; pos++, index++) {
  79. 79 cout << "姓名:" << pos->second.m_Name << " 薪资:" << pos->second.m_Salary << endl;
  80. 80 }
  81. 81
  82. 82 cout << "-----------------------" << endl;
  83. 83 cout << "研发部门:" << endl;
  84. 84 pos = m.find(YANFA);
  85. 85 count = m.count(YANFA); // 统计具体人数
  86. 86 index = 0;
  87. 87 for (; pos != m.end() && index < count; pos++, index++) {
  88. 88 cout << "姓名:" << pos->second.m_Name << " 薪资:" << pos->second.m_Salary << endl;
  89. 89 }
  90. 90 }
  91. 91
  92. 92 void test01() {
  93. 93
  94. 94 // 随机数
  95. 95 srand((unsigned int)time(NULL));
  96. 96
  97. 97 // 1.创建员工
  98. 98 vector<Worker>vWorker;
  99. 99 createWorker(vWorker);
  100. 100
  101. 101 // 测试员工信息
  102. 102 //for (vector<Worker>::iterator it = vWorker.begin(); it != vWorker.end(); it++) {
  103. 103 // cout << "姓名:" << it->m_Name << " 工资:" << it->m_Salary << endl;
  104. 104 //}
  105. 105
  106. 106 // 2.员工分组
  107. 107 multimap<int, Worker>mWorker;
  108. 108 setGroup(vWorker, mWorker);
  109. 109
  110. 110 // 3.分组显式员工
  111. 111 showWorkerByGroup(mWorker);
  112. 112 }
  113. 113
  114. 114 int main() {
  115. 115
  116. 116 test01();
  117. 117
  118. 118 system("pause");
  119. 119
  120. 120 return 0;
  121. 121 }

C++进阶实例2--员工分组的更多相关文章

  1. 《Genesis-3D开源游戏引擎-官方录制系列视频教程:进阶实例篇》

    注:本系列教程仅针对引擎编辑器:v1.2.2及以下版本 G3D进阶实例   第四课<2D编辑与脚本的统一入口> 使用G3D完成一个简单的类飞机大战游戏,介绍了G3D2d游戏制作的流程包括: ...

  2. [代码]multimap员工分组案例

    案例要求: //multimap 案例//公司今天招聘了 5 个员工,5 名员工进入公司之后,需要指派员工在那个部门工作//人员信息有: 姓名 年龄 电话 工资等组成//通过 Multimap 进行信 ...

  3. C++ STL 之 multimap案例之员工分组

    #include <iostream> #include <vector> #include <map> #include <string> #incl ...

  4. MySQL进阶5--分组函数 / 分组排序和分组查询 group by(having) /order by

    MySQL进阶--分组排序和分组查询 group by(having) /order by /* 介绍分组函数 功能:用做统计使用,又称为聚合函数或组函数 1.分类: sum, avg 求和 /平均数 ...

  5. 01_dubbo实例_服务分组

    [为什么要服务分组?] 当一个接口有多种实现时,可以用group区分. [ Provider 的配置信息] <?xml version="1.0" encoding=&quo ...

  6. mysql group by 与order by的实例分析(mysql分组统计后最大值)

    CREATE TABLE `test` ( `id` ) NOT NULL AUTO_INCREMENT, `name` ) CHARACTER SET latin1 DEFAULT NULL, `c ...

  7. vue进阶 --- 实例演示

    这篇博客将通过一个实例来对vue构建项目的过程有一个了解. 主要用到的知识点如下所示: vue-router 2.0路由配置 router-view 和 router-link的使用 transiti ...

  8. 《SQL 进阶教程》 自连接分组排序:练习题1-2-2

    分组排序 SELECT d1.district, d1. NAME, (SELECT COUNT(d2.price) FROM district_products d2 WHERE d2.price ...

  9. Java JNI 编程进阶 实例+c++数据类型与jni数据类型转换

    原文:http://www.iteye.com/topic/295776 JNI一直以来都很少去关注,但却是我心中的一个结,最近这几天刚好手头有点时间,因此抽空看了一下这方面的东西,整理了一份文档,J ...

随机推荐

  1. 哪个类包含 clone 方法?是 Cloneable 还是 Object?

    java.lang.Cloneable 是一个标示性接口,不包含任何方法,clone 方法在 object 类中定义.并且需要知道 clone() 方法是一个本地方法,这意味着它是由 c 或 c++ ...

  2. 速看,ElasticSearch如何处理空值

    大家好,我是咔咔 不期速成,日拱一卒 在MySQL中,十分不建议大家给表的默认值设置为Null,这个后期咔咔也会单独出一期文章来说明这个事情. 但你进入一家新公司之前的业务中存在大量的字段默认值为Nu ...

  3. 利用Matlab快速绘制栅格地图

    代码演示 % 基于栅格地图的机器人路径规划算法 % 第1节:利用Matlab快速绘制栅格地图 clc clear close all %% 构建颜色MAP图 cmap = [1 1 1; ... % ...

  4. 小程序输入框闪烁BUG解决方案

    前言 本人所说的小程序,都是基于mpvue框架而上的,因此BUG可能是原生小程序的,也有可能是mpvue的. 问题描述 在小程序input组件中,如果使用v-model进行双向绑定,在输入时会出现光标 ...

  5. 如何跨线程访问Winform中的UI元素

    如何跨线程访问Winform中的UI元素 假如制作一个Socket聊天应用程序,很可能会用到多线程: 例如为Receive方法开辟单独一个线程,例如为Receive方法开辟单独一个线程(后台运行的线程 ...

  6. Android:setOnItemClickListener cannot be used with a spinner报错

    错误原因: Spinner对象不支持使用setOnItemClickListener方法监听点击事项 解决方法: 使用setOnItemSelectedListener方法代替setOnItemCli ...

  7. JavaScript的使用以及JS常用函数(JS 遍历数组和集合)

    JavaScript入门 学习总结 1. 什么是 JavaScript 2. JavaScript 的特点 3. JS的使用 编写位置 基本语法 变量 打印变量 数据类型 innerHTML和inne ...

  8. sring框架的jdbc应用

      xml配置 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http: ...

  9. apache开启图片缓存压缩

    ①-浏览器缓存图片信息 开启Apache的expires模块,重启Apache 2.在虚拟主机的配置文件里面,增加对图片信息缓存的配置,重启Apache 3.在网站目录里面填写测试代码 4.测试效果 ...

  10. ABP源码分析 - 约定注册(2)

    比较随意,记录下过程,以便忘了以后重拾. 所谓约定注册是指不需要明确写代码注入,只需要按约定规则写服务类,框架自动完成服务注册. 例如,只要这样写,框架就会自动注册. public class Tax ...