步骤一:创建10名员工,放到vector中
//员工类
class Worker
{
public:Worker(string name, int salary) :m_name(name), m_salary(salary) {}string m_name;int m_salary;
};//创建员工并放入vector中
void createWorker(vector& vw)//注意用引用的方式传递 防止浅拷贝
{string nameseed = "ABCDEFGHIJ";for (int i = 0; i < 10; i++){string name = "员工";name += nameseed[i];int salary = rand() % 10001 + 15000;//10000-25000Worker w(name, salary);//员工放入vector容器中vw.push_back(w);}
}int main()
{//1、创建10名员工,放到vector中vector vworker;createWorker(vworker);//2、创建员工测试cout << "员工分组前\n" << endl;for (vector::iterator it = vworker.begin(); it != vworker.end(); it++){cout << "姓名:" << it->m_name << "\t工资:" << (*it).m_salary << endl;}cout << string(n, '-') << endl;
}
首先要创建员工类,类中包含姓名和工资信息,并且需要放进vector容器中。创建完之后,打印一下员工信息,看看是否能正常输出。
要注意的是,vector容器的元素类型是Person类,员工信息放进容器时用尾插法即可。
步骤二和三:遍历vector容器,随机分组,将员工部门编号作为key,具体员工作为value,放入到multimap容器中
//定义宏常量 代表1-3
#define CEHUA 1
#define MEISHU 2
#define YANFA 3//分组后,将员工部门编号作为key,具体员工作为value,放入到multimap容器中
void groupWorker(vector& vw, multimap& mw)
{//1. 遍历vector容器for (vector::iterator it = vw.begin(); it != vw.end(); it++){//2. 随机产生部门编号 范围1-3int deptId = rand() % 3 + 1;//定义宏常量 代表1-3//3. 员工放进multimap中 mw.insert(make_pair(deptId, *it));//deptId 部门编号 *it具体员工}
}int main()
{//1、创建10名员工,放到vector中vector vworker;createWorker(vworker);//2、创建员工测试cout << "员工分组前\n" << endl;for (vector::iterator it = vworker.begin(); it != vworker.end(); it++){cout << "姓名:" << it->m_name << "\t工资:" << (*it).m_salary << endl;}cout << string(n, '-') << endl;//3、员工分组 员工在vector中 分组后放进multimap中multimap mworker;groupWorker(vworker, mworker);
}
注意以下几点:
步骤四:分部门显示员工信息
//员工分组显示
void showWorkerbyGroup(multimap& m)
{int n = 40;cout << "策划部门" << endl;multimap::iterator pos = m.find(CEHUA);//找到策划部门 并返回这个部门的迭代器 int num = m.count(CEHUA);//统计该部门有多少人int index = 0;for (; pos != m.end() && index < num; pos++, index++){cout << "姓名:" << pos->second.m_name << "\t工资:" << pos->second.m_salary << endl;}cout << string(n, '-') << endl;cout << "美术部门" << endl;pos = m.find(MEISHU);//找到策划部门 并返回这个部门的迭代器 num = m.count(MEISHU);//统计该部门有多少人index = 0;for (; pos != m.end() && index < num; pos++, index++){cout << "姓名:" << pos->second.m_name << "\t工资:" << pos->second.m_salary << endl;}cout << string(n, '-') << endl;cout << "研发部门" << endl;pos = m.find(YANFA);//找到策划部门 并返回这个部门的迭代器 num = m.count(YANFA);//统计该部门有多少人index = 0;for (; pos != m.end() && index < num; pos++, index++){cout << "姓名:" << pos->second.m_name << "\t工资:" << pos->second.m_salary << endl;}
}int main()
{int n = 40;srand((unsigned int)time(NULL));//利用系统提供时间做真实的随机//1、创建10名员工,放到vector中vector vworker;createWorker(vworker);//1、测试cout << "员工分组前\n" << endl;for (vector::iterator it = vworker.begin(); it != vworker.end(); it++){cout << "姓名:" << it->m_name << "\t工资:" << (*it).m_salary << endl;}cout << string(n, '-') << endl;//2、员工分组 员工在vector中 分组后放进multimap中multimap mworker;groupWorker(vworker, mworker);//3、员工分组cout << "\n员工分组后\n" << endl;showWorkerbyGroup(mworker);cout << string(n, '-') << endl;system("pause");return 0;
}
注意以下几点:
multimap::iterator pos = m.find(CEHUA);
pos = m.find(MEISHU);
pos = m.find(YANFA);
for (; pos != m.end() ; pos++)
来输出,就会不仅把部门1的员工输出,还会输出其他部门的员工信息。但实际想要的效果是,只输出部门1的这A B C D G五个人。for (; pos != m.end() && index < num; pos++, index++)
srand((unsigned int)time(NULL));
,利用系统提供时间做真实的随机,要包含头文件#include
最终效果
总结: 当数据以键值对形式存在,可以考虑用map 或 multimap