员工分组案例分析(STL)
项目需求:
主函数框架以及思路:
测试代码已注释,整体思路为:
一、将数据放入容器
第一步:创建容器(容器选择,多用vector),存放数据(数据类型是什么,多为自定义类)
第二步:对容器中的多个对象进行初始化(注意不在第一步的构造函数里面初始化),具体过程为通过for循环创建相应数量对象,遍历所有对象,对对象中的属性进行初始化(nameSeed的使用,rand的使用技巧),然后将每一个初始化的类的对象压入容器vector
第三步:测试,遍历查看容器的数据
二、处理数据
第一步:创建容器(该容器用于存放处理后的数据,与前面不同),存放的数据类型根据需求确定
第二步:对数据进行处理,需要用到前面的两个容器(具体操作为两个容器引用作为形参),同样的是通过for循环遍历vector容器,并且对其中的数据进行处理然后插入到multimap容器(插入方式为对组)
第三步:测试,遍历查看multimap容器中的数据
三、按照相应的要求查看multimap容器数据
此处的要求是对容器中的数据进行分组之后进行查看
这里采用迭代器遍历每组的数据,迭代器的起始位置可以通过成员函数find确定,结束位置的话,可以通过每组数据个数count函数限定迭代器移动次数(移动次数不超过每组数据个数)
或者结束位置可以确定为下一组数据的起始位置
1 cout << "策划部门:" << endl;
2 multimap<int, Worker>::iterator pos = m.find(CeHua);
3 int count = m.count(CeHua);
4 int index = 0;
5 for (;pos != m.end() && index < count;pos++, index++)
6 {
7 cout << "姓名: " << pos->second.m_Name << " 工资:" << pos->second.m_Salary << endl;
8 }
可以参考的点:
1、通过宏定义使得意义更加明确
1#define CeHua 0 2 #define MeiShu 1 3 #define YanFa 2
2、使用nameseed使得属性初始化简便高级
1 string nameSeed = "ABCDEFGHIJ";
2 for (int i = 0;i < 10;i++)
3 {
4 Worker worker;
5 worker.m_Name = "员工";
6 worker.m_Name += nameSeed[i];
3、使用随机数初始化属性更加简便,配合随机数种子
1 srand((unsigned int)time(NULL));
2 worker.m_Salary = rand() % 10000 + 10000;//10000~19999;