16.10【STL案例2-员工分组】
#include<iostream> #include<cstdlib> using namespace std; #include<vector> #include<string> #include<map> #include<ctime> #define CEHUA 0 #define MEISHU 1 #define YANFA 2 /* 3.10 案例-员工分组 案例描述 公司今天招聘了10个员工(ABCDEFGHIJ),10名员工进入公司之后,需要指派员工在那个部门工作 员工信息有: 姓名 工资组成;部门分为:策划、美术、研发 随机给10名员工分配部门和工资 通过multimap进行信息的插入 key(部门编号) value(员工) 分部门显示员工信息 实现步骤 1. 创建10名员工,放到vector中 2. 遍历vector容器,取出每个员工,进行随机分组 3. 分组后,将员工部门编号作为key,具体员工作为value,放入到multimap容器中 4. 分部门显示员工信息 */ class Worker { public: string name; int salary; }; void create_worker(vector<Worker> & v) { string name_seed = "ABCDEFGHIJ"; for(int i=0; i<10; i++) { Worker worker; worker.name = "员工"; worker.name += name_seed[i]; worker.salary = rand() % 10000 + 10000; //10000~19999 //将员工插入到容器中 v.push_back(worker); } } void set_group(vector<Worker> & v, multimap<int, Worker> & m) { for(vector<Worker>::iterator it=v.begin(); it!=v.end(); it++) { //产生随机部分编号 int dept_id = rand() % 3; //0 1 2 //将员工插入到分组中 m.insert(make_pair(dept_id, *it)); //key=部分编号,value=具体员工 } } void show_worker_by_group(multimap<int, Worker> & m) { cout << "策划部门:" << endl; multimap<int, Worker>::iterator pos = m.find(CEHUA); int num = m.count(CEHUA); int index = 0; for(; pos!=m.end() && index<num; pos++, index++) { cout << "name:" << pos->second.name << " salary:" << pos->second.salary << endl; } cout << "美术部门:" << endl; pos = m.find(MEISHU); num = m.count(MEISHU); index = 0; for(; pos!=m.end() && index<num; pos++, index++) { cout << "name:" << pos->second.name << " salary:" << pos->second.salary << endl; } cout << "研发部门:" << endl; pos = m.find(YANFA); num = m.count(YANFA); index = 0; for(; pos!=m.end() && index<num; pos++, index++) { cout << "name:" << pos->second.name << " salary:" << pos->second.salary << endl; } } int main() { //0 随机种子 srand((unsigned int)time(NULL));//利用系统时间实现真随机 //1 创建员工 vector<Worker> vw; create_worker(vw); /* //测试 for(vector<Worker>::iterator it=vw.begin(); it!=vw.end(); it++) { cout << "name:" << it->name << " salary:" << it->salary << endl; } */ //2 员工分组 multimap<int, Worker> mw; set_group(vw, mw); //3 分组显示员工 show_worker_by_group(mw); system("pause"); return 0; }