C++小练习-multimap容器应用

multimap容器与vector容器应用

案列描述:

公司今天招聘了10个员工(ABCDEFHJ),10名员工进入公司之后分配到不同部门

部门有:”美术”,”研发”,”策划”

人员信息有: 姓名 工资 部门等组成

随机生成人员信息和分配部门

通过multimap进行信息的插入,key(部门),value(员工)

分部门显示员工信息

代码实现:

Staff员工类:

头文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
//
// Created by Beyond on 2024/7/10.
//

#ifndef UNTITLED2_STAFF_H
#define UNTITLED2_STAFF_H
#include<iostream>
using namespace std;

// 员工类定义
class Staff {
private:
string name; // 员工姓名
int salary; // 员工薪资
string department; // 员工部门
public:
Staff(); // 默认构造函数
Staff(const string &name, int salary, const string &department); // 带参数的构造函数

const string &getName() const; // 获取姓名

void setName(const string &name); // 设置姓名

int getSalary() const; // 获取薪资

void setSalary(int salary); // 设置薪资

const string &getDepartment() const; // 获取部门

void setDepartment(const string &department); // 设置部门
};


#endif //UNTITLED2_STAFF_H

类实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
//
// Created by Beyond on 2024/7/10.
//

#include "Staff.h"

// 默认构造函数实现
Staff::Staff() {}

// 带参数的构造函数实现
Staff::Staff(const string &name, int salary, const string &department) : name(name), salary(salary),
department(department) {}

// 获取姓名实现
const string &Staff::getName() const {
return name;
}

// 设置姓名实现
void Staff::setName(const string &name) {
Staff::name = name;
}

// 获取薪资实现
int Staff::getSalary() const {
return salary;
}

// 设置薪资实现
void Staff::setSalary(int salary) {
Staff::salary = salary;
}

// 获取部门实现
const string &Staff::getDepartment() const {
return department;
}

// 设置部门实现
void Staff::setDepartment(const string &department) {
Staff::department = department;
}

main函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#include <iostream>
#include <map>
#include <vector>
#include "Staff.h"

using namespace std;

// 为员工设置信息的函数
void information(Staff &s) {
int randomSalary = rand() % 25001 + 5000; // 随机生成薪资
s.setSalary(randomSalary);
int randomDepartment = rand() % 3; // 随机选择部门
char *department[] = {"策划", "美术", "研发"};
s.setDepartment(department[randomDepartment]);
return;
}

// 创建员工并添加到向量中的函数
void creativeStaff(vector<Staff> &v) {
string name = "ABCDEFGHIJ";
string name1 = "员工";
for (int i = 0; i < 10; i++) {
Staff s;
s.setName(name[i] + name1); // 设置员工姓名
information(s); // 设置员工信息
v.push_back(s); // 添加到向量
}
}

// 打印员工信息的函数
void printStaff(vector<Staff> &v) {
for (Staff s: v) {
cout << "姓名:" << s.getName() << '\t' << " 工资:" << s.getSalary() << '\t' << " 部门:" << s.getDepartment()
<< endl;
}
}

// 将员工按部门分配到multimap中的函数
void distribution(multimap<string, Staff> &m, vector<Staff> &v) {
for (Staff s: v) {
m.insert({s.getDepartment(), s});
}
}

// 按部门打印员工信息的函数
void printByDepartment(multimap<string, Staff> &m) {
char *department[] = {"策划", "美术", "研发"};
for (int i = 0; i < 3; i++) {
cout << department[i] << "部门:" << endl;
for (pair<string, Staff> s: m) {
if (s.first == department[i]) {
cout<<"姓名:"<<s.second.getName()<<'\t'<<"工资:"<<s.second.getSalary()<<endl;
}
}
cout<<endl;
}
}

// 测试函数
void test() {
srand(time(NULL)); // 初始化随机数生成器
vector<Staff> v;
creativeStaff(v); // 创建员工
multimap<string, Staff> m;
distribution(m, v); // 分配员工
printByDepartment(m); // 按部门打印信息
}

int main() {
test();
return 0;
}

输出结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
策划部门:
姓名:A员工 工资:22028
姓名:B员工 工资:14367
姓名:D员工 工资:6268
姓名:I员工 工资:6497

美术部门:
姓名:E员工 工资:12154
姓名:H员工 工资:13239
姓名:J员工 工资:17478

研发部门:
姓名:C员工 工资:12070
姓名:F员工 工资:12187
姓名:G员工 工资:21004