C++中使用Multimap和Vector管理和展示数据

一:

在本文中,我们将探讨如何在C++中使用vectormultimap容器来管理一个简单的员工数据系统。我们将创建一个员工类,随机生成员工数据,将员工分组,并展示各组员工的详细信息。此示例展示了C++标准模板库(STL)的强大功能和灵活性。

1. 定义员工类

我们首先定义一个worker类,包含员工的名字(name)和薪水(salary)。这是一个简单的公有类,成员变量可以直接访问。

cpp 复制代码
class worker {
public:
    string name;
    int salary;
};
2. 生成员工数据

使用vector容器来存储worker对象。vector是一种动态数组,提供快速的随机访问和尾部插入删除操作。

createworker函数用于生成10名员工的数据。每名员工的名字是"NAME"后跟一个字母,薪水是随机生成的,范围在10000到19999之间。

cpp 复制代码
void createworker(vector<worker>& v) {
    string nameseed = "BCDEFGHIJ";
    for (int i = 0; i < 10; i++) {
        worker worker1;
        worker1.name = "NAME";
        worker1.name += nameseed[i];
        worker1.salary = rand() % 10000 + 10000;
        v.push_back(worker1);
    }
}
3. 分组存储

multimap容器用于按组存储员工数据。multimap是允许键重复的排序关联容器,非常适合管理具有自然分组但又需要排序的数据。

我们将员工随机分为三组(ART, SCIENCE, MATH)。setgroup函数将vector中的每个员工根据随机生成的组号插入到multimap中。

cpp 复制代码
void setgroup(vector<worker>& v, multimap<int, worker>& m) {
    for (vector<worker>::iterator it = v.begin(); it != v.end(); it++) {
        int group = rand() % 3 + 1;  // 1-3的组号
        m.insert(make_pair(group, *it));
    }
}
4. 显示分组数据

最后,我们通过showworker函数来展示各组的员工数据。对于每一组,我们首先查找该组的第一个员工,然后遍历该组所有员工,打印他们的名字和薪水。

cpp 复制代码
void showworker(multimap<int, worker>& m) {
    cout << "ART:" << endl;
    displayGroup(m, ART);
    cout << "SCIENCE:" << endl;
    displayGroup(m, SCIENCE);
    cout << "MATH:" << endl;
    displayGroup(m, MATH);
}

void displayGroup(multimap<int, worker>& m, int groupID) {
    auto pos = m.find(groupID);
    int num = m.count(groupID);
    for (int index = 0; pos != m.end() && index < num; index++, pos++) {
        cout << "NAME:  " << pos->second.name << " salary:   " << pos->second.salary << endl;
    }
    cout << "--------------------------------------------" << endl;
}
5. 主函数

main函数中,我们初始化随机数生成器,创建员工vector,设置员工分组,并展示所有组的员工信息。

cpp 复制代码
int main() {
    srand((unsigned int)time(NULL));
    vector<worker>v;
    createworker(v);
    multimap<int, worker>m;
    setgroup(v, m);
    showworker(m);
    return 0;
}

结论

这个示例展示了如何使用C++ STL的vectormultimap容器来管理和展示复杂数据。通过这种方式,我们可以有效地组织数据,并利用容器自带的功能来简化代码和提高效。

二、完整代码

cpp 复制代码
#define ART 1
#define SCIENCE 2
#define MATH 3
class worker
{
public:
	string name;
	int salary;
};
void createworker(vector<worker>& v)
{
	string nameseed = "BCDEFGHIJ";
	for (int i = 0; i < 10; i++)
	{
		worker worker1;
		worker1.name = "NAME";
		worker1.name += nameseed[i];
		worker1.salary = rand() % 10000 + 10000;
		v.push_back(worker1);
	}
}
void setgroup(vector<worker>& v, multimap<int, worker>& m)
{
	for (vector<worker>::iterator it = v.begin(); it != v.end(); it++)
	{
		int group = rand() % 3+1;
		m.insert(make_pair(group, *it));
	}
}
void showworker(multimap<int, worker>& m)
{
	cout << "ART:" << endl;
	multimap<int, worker>::iterator pos = m.find(ART);
	int num = m.count(ART);
	int index = 0;
	for (; pos != m.end() && index != num; index++, pos++)
	{
		cout << "NAME:  " << pos->second.name << "salary:   " << pos->second.salary << endl;
	}
	cout << "-------------------------------------------- - " << endl;

	cout << "SCIENCE:" << endl;
	multimap<int, worker>::iterator pos1 = m.find(SCIENCE);
	int num1 = m.count(SCIENCE);
	int index1 = 0;
	for (; pos1 != m.end() && index1 != num1; index1++, pos1++)
	{
		cout << "NAME:  " << pos1->second.name << "salary:   " << pos1->second.salary << endl;
	}
	cout << "-------------------------------------------- - " << endl; 

	cout << "MATH:" << endl;
	multimap<int, worker>::iterator pos2 = m.find(MATH);
	int num2 = m.count(MATH);
	int index2 = 0;
	for (; pos2 != m.end() && index2 != num2; index2++, pos2++)
	{
		cout << "NAME:  " << pos2->second.name << "salary:   " << pos2->second.salary << endl;
	}
}
int main()
{
	srand((unsigned int)time(NULL));
	vector<worker>v;
	createworker(v);
	multimap<int, worker>m;
	setgroup(v,m);
	showworker(m);
	return 0;
}
相关推荐
bst@微胖子27 分钟前
Python高级语法之selenium
开发语言·python·selenium
Paddi93030 分钟前
Codeforces Round 1004 (Div. 1) C. Bitwise Slides
c++·算法
王小义笔记32 分钟前
Postman如何流畅使用DeepSeek
开发语言·测试工具·lua·postman·deepseek
java1234_小锋3 小时前
一周学会Flask3 Python Web开发-request请求对象与url传参
开发语言·python·flask·flask3
流星白龙5 小时前
【C++】36.C++IO流
开发语言·c++
诚信爱国敬业友善6 小时前
常见排序方法的总结归类
开发语言·python·算法
靡不有初1116 小时前
CCF-CSP第31次认证第二题——坐标变换(其二)【NA!前缀和思想的细节,输出为0的常见原因】
c++·学习·ccfcsp
nbsaas-boot7 小时前
Go 自动升级依赖版本
开发语言·后端·golang
架构默片7 小时前
【JAVA工程师从0开始学AI】,第五步:Python类的“七十二变“——当Java的铠甲遇见Python的液态金属
java·开发语言·python
不只会拍照的程序猿8 小时前
从插入排序到希尔排序
java·开发语言·数据结构·算法·排序算法