看了几天的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);