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

一:

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

1. 定义员工类

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

class worker {
public:
    string name;
    int salary;
};
2. 生成员工数据

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

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

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中。

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函数来展示各组的员工数据。对于每一组,我们首先查找该组的第一个员工,然后遍历该组所有员工,打印他们的名字和薪水。

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,设置员工分组,并展示所有组的员工信息。

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容器来管理和展示复杂数据。通过这种方式,我们可以有效地组织数据,并利用容器自带的功能来简化代码和提高效。

二、完整代码

#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;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/596246.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

为什么感觉没有效果

以前在辅导小儿作业的时候&#xff0c;我会在常用的搜索引擎里去寻找答案&#xff0c;一般情况下都能解决问题。 但是最近一段时间&#xff0c;我发现&#xff0c;搜索引擎搜出来的结果还没有利用短视频搜出来的答案更全面&#xff0c;短视频软件不仅可以显示AI整理出来的答案…

js api part4

其他事件 页面加载事件 外部资源&#xff08;如图片、外联CSS和JavaScript等&#xff09;加载完毕时触发的事件 原因&#xff1a;有些时候需要等页面资源全部处理完了做一些事情&#xff0c;老代码喜欢把 script 写在 head 中&#xff0c;这时候直接找 dom 元素找不到。 事件…

2010-2022年上市公司彭博ESG披露评分、分项得分数据

2010-2022年上市公司彭博ESG披露评分、分项得分数据 1、时间&#xff1a;2010-2022年 2、来源&#xff1a;Bloomberg ESG 指数 3、指标&#xff1a;股票代码、股票简称、年份、ESG披露评分、环境披露评分、社会信息披露评分、治理披露评分 4、范围&#xff1a;上市公司 5、…

OpenNJet:下一代云原生应用引擎

OpenNJet&#xff1a;下一代云原生应用引擎 前言一、技术架构二、新增特性1. 透明流量劫持2. 熔断机制3. 遥测与故障注入 三、Ubuntu 发行版安装 OpentNJet1. 添加gpg 文件2. 添加APT 源3. 安装及启动4. 验证 总结 前言 OpenNJet&#xff0c;是一款基于强大的 NGINX 技术栈构建…

Java苍穹外卖04-

一、缓存菜品 1.问题说明 2.实现思路 就是点击到这个分类的时候就可以展示相应的菜品数据 3.代码实现 在user的菜品的contoller中&#xff1a;增加判断redis中是否存在所需数据&#xff0c;不存在添加&#xff0c;存在直接取得 这里注意&#xff1a;你放进去用的是List<Di…

【Osek网络管理测试】[TG3_TC3]tSleepRequestMin_L

&#x1f64b;‍♂️ 【Osek网络管理测试】系列&#x1f481;‍♂️点击跳转 文章目录 1.环境搭建2.测试目的3.测试步骤4.预期结果5.测试结果 1.环境搭建 硬件&#xff1a;VN1630 软件&#xff1a;CANoe 2.测试目的 验证DUT进入NMLimpHome状态后请求睡眠的最短时间是否正确…

Flink时间语义 | 大数据技术

⭐简单说两句⭐ ✨ 正在努力的小叮当~ &#x1f496; 超级爱分享&#xff0c;分享各种有趣干货&#xff01; &#x1f469;‍&#x1f4bb; 提供&#xff1a;模拟面试 | 简历诊断 | 独家简历模板 &#x1f308; 感谢关注&#xff0c;关注了你就是我的超级粉丝啦&#xff01; &a…

SpringBoot+Vue+Element-UI实现学生综合成绩测评系统

前言介绍 学生成绩是高校人才培养计划的重要组成部分&#xff0c;是实现人才培养目标、培养学生科研能力与创新思维、检验学生综合素质与实践能力的重要手段与综合性实践教学环节。而学生所在学院多采用半手工管理学生成绩的方式&#xff0c;所以有必要开发学生综合成绩测评系…

校园寄取快递代拿小程序源码系统 带完整的安装代码包以及搭建教程

在数字化快速发展的今天&#xff0c;校园生活也在不断地与时俱进&#xff0c;向着更加便捷、高效的方向迈进。为了满足学生们对于快递寄取代拿的便捷需求&#xff0c;小编给大家分享一款校园寄取快递代拿小程序源码系统&#xff0c;该系统不仅提供了完整的安装代码包&#xff0…

矩池云jupyter运行opengait代码 未完成版

文章目录 前言——矩池云的使用技巧1.切换源 一、下载数据集二、下载模型三、环境配置1.查看python、torch、torchvision版本2.查看一些包版本是否过高3.下载包 四、开始训练1.设置环境变量2.遇到的问题&#xff08;1&#xff09;torch.cuda.is_available()返回false&#xff0…

python绘图(pandas)

matplotlib绘图 import pandas as pd abs_path rF:\Python\learn\python附件\pythonCsv\data.csv df pd.read_csv(abs_path, encodinggbk) # apply根据多列生成新的一个列的操作&#xff0c;用apply df[new_score] df.apply(lambda x : x.数学 x.语文, axis1)# 最后几行 …

接口自动化测试拓展:接口Mock的理念与实战场景!

接口自动化测试是软件开发过程中不可或缺的一环。在实际开发中&#xff0c;我们常常会遇到需要依赖其他模块的接口或者服务来完成测试的情况。而在开发初期或者接口尚未完成的情况下&#xff0c;就需要使用接口Mock来模拟未实现的接口功能。接口Mock是一种模拟接口行为的技术&a…

基于树的时间序列预测(LGBM)

在大多数时间序列预测中&#xff0c;尽管有Prophet和NeuralProphet等方便的工具&#xff0c;但是了解基于树的模型仍然具有很高的价值。尤其是在监督学习模型中&#xff0c;仅仅使用单变量时间序列似乎信息有限&#xff0c;预测也比较困难。因此&#xff0c;为了生成足够的特征…

每日两题 / 24. 两两交换链表中的节点 25. K 个一组翻转链表(LeetCode热题100)

24. 两两交换链表中的节点 - 力扣&#xff08;LeetCode&#xff09; 定义三个指针&#xff0c;交换前先保存ntnt指针为next->next&#xff0c;cur和next两个节点&#xff0c;然后将pre->next指向next 若pre为空&#xff0c;说明当前交换的节点为头两个节点&#xff0c;…

《Python编程从入门到实践》day20

#尝试在python3.11文件夹和pycharm中site-packages文件夹中安装&#xff0c;最终在scripts文件夹中新建py文件成功导入pygame运行程序 #今日知识点学习 import sysimport pygameclass AlienInvasion:"""管理游戏资源和行为的类"""def __init__(…

动态规划——背包问题(01,完全,多重)

一、01背包问题 1.题目描述 有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。第 i 件物品的体积是 vi&#xff0c;价值是 wi。 求解将哪些物品装入背包&#xff0c;可使这些物品的总体积不超过背包容量&#xff0c;且总价值最大。输出最大价值。 01背包问题特点&…

数据分析之Tebleau可视化:树状图、日历图、气泡图

树状图&#xff08;适合子分类比较多的&#xff09; 1.基本树状图的绘制 同时选择产品子分类和销售金额----选择智能推荐----选择树状图 2.双层树状图的绘制 将第二个维度地区拖到产品分类的下面---大的划分区域是上面的维度&#xff08;产品分类&#xff09;&#xff0c;看着…

cmake进阶:文件操作

一. 简介 前面几篇文章学习了 cmake的文件操作&#xff0c;写文件&#xff0c;读文件。文章如下&#xff1a; cmake进阶&#xff1a;文件操作之写文件-CSDN博客 cmake进阶&#xff1a;文件操作之读文件-CSDN博客 本文继续学习文件操作。主要学习 文件重命名&#xff0c;删…

C++引用2

什么是引用变量&#xff1f; 引用实际上是已定义变量的别名&#xff0c;使一个变量拥有多个名字 c给&#xff06;符号赋予了另一个意义&#xff0c;将其用来声明引用 int a9;int&ba; 此时b成为a的一个别名&#xff0c;a就是b,b就是a.它们均指向同一片内存 int a99; in…

虚拟键代码

虚拟键代码 虚拟键码 (Winuser.h) - Win32 apps | Microsoft Learn 在Windows操作系统中&#xff0c;虚拟键代码&#xff08;Virtual-Key Codes&#xff09;是一组用来表示键盘上按键的数值。这些代码通常用于Windows API函数&#xff0c;以便程序能够识别和处理键盘输入。 虚拟…
最新文章