C++案例-員工分組

it_xiangqiang發表於2020-11-10

3.10.1 案例描述

  • 公司今天招聘了10個員工(ABCDEFGHIJ),10名員工進入公司之後,需要指派員工在那個部門工作
  • 員工資訊有: 姓名 工資組成;部門分為:策劃、美術、研發
  • 隨機給10名員工分配部門和工資
  • 通過multimap進行資訊的插入 key(部門編號) value(員工)
  • 分部門顯示員工資訊

3.10.2 實現步驟

  1. 建立10名員工,放到vector中
  2. 遍歷vector容器,取出每個員工,進行隨機分組
  3. 分組後,將員工部門編號作為key,具體員工作為value,放入到multimap容器中
  4. 分部門顯示員工資訊

案例程式碼:

#include<iostream>
using namespace std;
#include <vector>
#include <string>
#include <map>
#include <ctime>

/*
- 公司今天招聘了10個員工(ABCDEFGHIJ),10名員工進入公司之後,需要指派員工在那個部門工作
- 員工資訊有: 姓名  工資組成;部門分為:策劃、美術、研發
- 隨機給10名員工分配部門和工資
- 通過multimap進行資訊的插入  key(部門編號) value(員工)
- 分部門顯示員工資訊
*/

#define CEHUA  0
#define MEISHU 1
#define YANFA  2

class Worker
{
public:
	string m_Name;
	int m_Salary;
};

void createWorker(vector<Worker>&v)
{
	string nameSeed = "ABCDEFGHIJ";
	for (int i = 0; i < 10; i++)
	{
		Worker worker;
		worker.m_Name = "員工";
		worker.m_Name += nameSeed[i];

		worker.m_Salary = rand() % 10000 + 10000; // 10000 ~ 19999
		//將員工放入到容器中
		v.push_back(worker);
	}
}

//員工分組
void setGroup(vector<Worker>&v,multimap<int,Worker>&m)
{
	for (vector<Worker>::iterator it = v.begin(); it != v.end(); it++)
	{
		//產生隨機部門編號
		int deptId = rand() % 3; // 0 1 2 

		//將員工插入到分組中
		//key部門編號,value具體員工
		m.insert(make_pair(deptId, *it));
	}
}

void showWorkerByGourp(multimap<int,Worker>&m)
{
	// 0  A  B  C   1  D  E   2  F G ...
	cout << "策劃部門:" << endl;

	multimap<int,Worker>::iterator pos = m.find(CEHUA);
	int count = m.count(CEHUA); // 統計具體人數
	int index = 0;
	for (; pos != m.end() && index < count; pos++ , index++)
	{
		cout << "姓名: " << pos->second.m_Name << " 工資: " << pos->second.m_Salary << endl;
	}

	cout << "----------------------" << endl;
	cout << "美術部門: " << endl;
	pos = m.find(MEISHU);
	count = m.count(MEISHU); // 統計具體人數
	index = 0;
	for (; pos != m.end() && index < count; pos++, index++)
	{
		cout << "姓名: " << pos->second.m_Name << " 工資: " << pos->second.m_Salary << endl;
	}

	cout << "----------------------" << endl;
	cout << "研發部門: " << endl;
	pos = m.find(YANFA);
	count = m.count(YANFA); // 統計具體人數
	index = 0;
	for (; pos != m.end() && index < count; pos++, index++)
	{
		cout << "姓名: " << pos->second.m_Name << " 工資: " << pos->second.m_Salary << endl;
	}

}

int main() {

	srand((unsigned int)time(NULL));

	//1、建立員工
	vector<Worker>vWorker;
	createWorker(vWorker);

	//2、員工分組
	multimap<int, Worker>mWorker;
	setGroup(vWorker, mWorker);


	//3、分組顯示員工
	showWorkerByGourp(mWorker);

	測試
	//for (vector<Worker>::iterator it = vWorker.begin(); it != vWorker.end(); it++)
	//{
	//	cout << "姓名: " << it->m_Name << " 工資: " << it->m_Salary << endl;
	//}

	system("pause");

	return 0;
}

總結:

  • 當資料以鍵值對形式存在,可以考慮用map 或 multimap

相關文章