STL中vector和multimap的结合使用

看了几天的stl,也有了一些初步的了解,其实stl就是c++的比较全的库函数,比如我们在学习c语言中肯定做过链表的反转,删除,插入等操作,但是stl给我们就提供了很大的帮助,不需要我们来自己一个一个自己来写在实现,我们只需要调用一个函数,就可以实现我们所需要的操作。

vector和map都相当于一个容器,比如,一个班的学生就是一个大容器,我门想要将学生的1-10,11-20,,放在一个容器里,那我们就需要multimap来实现;

比如说一个公司要将同一部门的信息打印出来,我门也需要vector和map容器来实现

(1)首先创建公司员工的成员信息。

(2)给他们随机分配部门。

(3)通过map容器将同一部门的人员信息打印出来

#include<iostream>
#include<vector>
#include<map>
#include<string>
#include<time.h>
#include<stdlib.h>
using namespace std;
#define SALE_DEPARTMENT 1  //销售
#define DEVELOP_DEPARTMENT 2//开发
#define FINACIAL_DEPARTMENT 3//财政
class work
{
public:
	//work();
	//work(string Name, string Tele, int Age, int Salary) : mName(Name), mTele(Tele), mAge(Age), mSalary(Salary){};
	string mName;
   int  mTele;
	int mAge;
	int mSalary;
};
void creat_Work(vector<work>&vWork)//创建员工
{
	srand(time(0));
	string seedName = "ABCDE";
	for (int i = 0; i < 6; i++)
	{
		work work1;
		work1.mName = "员工";
		work1.mName += seedName[i];
		work1.mAge = 20 + rand() % 20;
		work1.mTele = rand()%100000000;
		work1.mSalary = rand() % 10000 + 10000;
		vWork.push_back(work1);//保存员工信息
	}
}//上面两个要注释掉才能运行,不注释就不能运行,定义了函数,系统就不会给你分配默认的构造函数了

void workerByGroup(vector<work>&vWork, multimap<int, work>&workerGroup)//员工分组
{
	for (vector<work>::iterator it = vWork.begin(); it != vWork.end(); it++)             //把员工随机分配各个普门
	{
		int departId = rand() % 3 + 1;
		switch (departId)
		{
		case SALE_DEPARTMENT:
			workerGroup.insert(make_pair(SALE_DEPARTMENT, *it));
			break;
		case DEVELOP_DEPARTMENT:
			workerGroup.insert(make_pair(DEVELOP_DEPARTMENT, *it));
			break;
		case  FINACIAL_DEPARTMENT:
			workerGroup.insert(make_pair(FINACIAL_DEPARTMENT, *it));
			break;
		default:
			break;
		}
	}

}
void showgroupworkers(multimap<int, work>&workerGroup,int ID)
{
	multimap<int, work>::iterator pos = workerGroup.find(ID);//找到同部门的第一个人位置返回一个迭代器
	int staffCount = workerGroup.count(ID); //当前部门人数总人数
	int num = 0;
	for (multimap<int, work>::iterator it =pos;it!= workerGroup.end() && num < staffCount; it++, num++)
	{
		cout << "姓名:" << it->second.mName << "年龄:" << it->second.mAge << "工资:" << it->second.mSalary << "电话:" << it->second.mTele << endl;
	}
}
void printWorkdata(multimap<int, work>&workerGroup)//打印信息
{
	cout << "销售部门" << endl;
	showgroupworkers(workerGroup, SALE_DEPARTMENT);
	cout << "开发部门" << endl;
	showgroupworkers(workerGroup, DEVELOP_DEPARTMENT);
	cout << "财政部门" << endl;
	showgroupworkers(workerGroup, FINACIAL_DEPARTMENT);
}
int main()
{
	vector<work>vWork;//存放员工信息
	multimap<int, work>workerGroup;//multimap保存分组信息key!!
	creat_Work(vWork);//创建员工
	workerByGroup(vWork, workerGroup);//员工分组
	printWorkdata(workerGroup);//打印信息
	//cout << "ddd" << endl;
	system("pause");

}

显示各个部门的信息的时候,首先要找到这个部门第一位成员的“迭代器”的位置, workerGroup.find(ID),同时要记录在本组人员的个数int staffCount = workerGroup.count(ID);

猜你喜欢

转载自blog.csdn.net/trainhui/article/details/86614311