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;
}
相关推荐
晨曦_子画5 分钟前
编程语言之战:AI 之后的 Kotlin 与 Java
android·java·开发语言·人工智能·kotlin
Black_Friend14 分钟前
关于在VS中使用Qt不同版本报错的问题
开发语言·qt
发霉的闲鱼30 分钟前
MFC 重写了listControl类(类名为A),并把双击事件的处理函数定义在A中,主窗口如何接收表格是否被双击
c++·mfc
小c君tt32 分钟前
MFC中Excel的导入以及使用步骤
c++·excel·mfc
希言JY38 分钟前
C字符串 | 字符串处理函数 | 使用 | 原理 | 实现
c语言·开发语言
残月只会敲键盘38 分钟前
php代码审计--常见函数整理
开发语言·php
xianwu54338 分钟前
反向代理模块
linux·开发语言·网络·git
xiaoxiao涛40 分钟前
协程6 --- HOOK
c++·协程
ktkiko1144 分钟前
Java中的远程方法调用——RPC详解
java·开发语言·rpc
y5236481 小时前
Javascript监控元素样式变化
开发语言·javascript·ecmascript