员工分组案例分析(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 

 

posted @ 2022-04-18 22:07  电线杆上写代码  阅读(108)  评论(0)    收藏  举报