C++中使用Multimap和Vector管理和展示数据
一:
在本文中,我们将探讨如何在C++中使用vector和multimap容器来管理一个简单的员工数据系统。我们将创建一个员工类,随机生成员工数据,将员工分组,并展示各组员工的详细信息。此示例展示了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的vector和multimap容器来管理和展示复杂数据。通过这种方式,我们可以有效地组织数据,并利用容器自带的功能来简化代码和提高效。
二、完整代码
#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;
}
相关文章:
C++中使用Multimap和Vector管理和展示数据
一: 在本文中,我们将探讨如何在C中使用vector和multimap容器来管理一个简单的员工数据系统。我们将创建一个员工类,随机生成员工数据,将员工分组,并展示各组员工的详细信息。此示例展示了C标准模板库(STL&…...
Java---类和方法的再学习
上一篇主要介绍了面向对象的思想以及内存实现,关于类与对象感觉写的不够好,因此才会有这一篇作为补充; 一:类与对象 (1)类 一些相同属性和行为的事物的统称,比较广泛、抽象,比如…...
C语言每日一练(12、水仙花数)
在编程的领域中,我们常常会遇到一些有趣而富有挑战性的问题。今天,让我们一起来探讨一个经典的编程题目——打印出所有的“水仙花数”。 所谓“水仙花数”,是指一个三位数,其各位数字的立方和等于该数本身。例如,153 …...
HTML5实现酷炫个人产品推广、工具推广、信息推广、个人主页、个人介绍、酷炫官网、门户网站模板源码
文章目录 1.设计来源1.1 主界面1.2 我的产品界面1.3 关于我们界面1.4 照片墙界面1.5 发展历程界面1.6 优秀人才界面1.7 热门产品界面1.8 联系我们界面 2.灵活调整模块3.效果和源码3.1 动态效果3.2 源代码 源码下载 作者:xcLeigh 文章地址:https://blog.c…...
系统如何做好安全加固?
一、Windows系统 Windows系统出厂时,微软为了兼容性,默认并未对系统安全做严格的限制,因此还需要做一些基本的安全加固,方可防止黑客入侵。 1、系统补丁更新 为什么要更新系统补丁?很多人感觉漏洞更新没必要&#x…...
对NI系统和PLC系统的应用比较
以下是对这两种系统的基本比较: 1. 设计和功能性 NI系统: 通常基于LabVIEW等软件平台,提供强大的数据采集、信号处理和图形界面开发能力。高度模块化和可扩展,支持各种传感器和信号类型。适合进行复杂的数据分析和高级控制算法的…...
微服务架构中的挑战及应对方式:Outbox 模式
使用 Outbox 模式保持微服务数据一致性 在一个由许多小型服务组成的系统中保持数据一致性是困难的,因为它们分散在各处。以下是一些常见问题以及如何处理它们的方法:当服务发送消息时,同时更新数据库和发送消息是棘手的问题。 在微服务中发出…...
使用Docker安装MySQL5.7.36
拉取镜像并查看 docker pull mysql:5.7.36拉取成功后查看(非必须) docker images创建并设置宿主机 mysql 配置文件目录和数据文件目录 创建相关文件夹将容器中的mysql数据保存到本地,这样即使容器被删除,数据也不会丢失。 mkd…...
【PyTorch】6-可视化(网络结构可视化、CNN可视化、TensorBoard、wandb)
PyTorch:6-可视化 注:所有资料来源且归属于thorough-pytorch(https://datawhalechina.github.io/thorough-pytorch/),下文仅为学习记录 6.1:可视化网络结构 Keras中可以调用model.summary()的API进行模型参数可视化 torchinfo…...
C++容器——map和pair对组
pair(对组) 是一种模板类,允许将两个不同类型的值组合在一起。它由两个数据成员first和second组成,分别用来保存这两个值。 头文件 加头文件 #include<utility> 对于 C11 及以上标准,pair 类型可以在不包含头…...
MVC和DDD的贫血和充血模型对比
文章目录 架构区别MVC三层架构DDD四层架构 贫血模型代码示例 充血模型代码示例 架构区别 MVC三层架构 MVC三层架构是软件工程中的一种设计模式,它将软件系统分为 模型(Model)、视图(View)和控制器(Contro…...
如何利用AI提高内容生产效率?
如何利用AI提高内容生产效率? 简介:探讨如何通过AI技术提升内容生产的效率和质量。 方向一:自动化内容生成 自动化内容生成是一种利用人工智能技术来自动创建文本、图像、音频等内容的方法。 以下是一些常见的自动化内容生成方式: 基于…...
C++ stack、queue以及deque
1、stack和queue常用接口 严格来说栈和队列的实现是容器适配器 1、常用接口: 栈:top、push、pop、size、emptystack - C Reference (cplusplus.com) 队列:top、push、pop、swap、size、emptyqueue - C Reference (cplusplus.com) 2、deque&a…...
科沃斯,「扫地茅」荣光恐难再现
作者 | 辰纹 来源 | 洞见新研社 科沃斯恐怕已经很难再回到被市场誉为“扫地茅”时的荣光了。 不久前,科沃斯发布2023年财报,报告期内营业收入155亿,同比仅增长1.16%,归母净利润6.12亿元,同比下降63.96%,直…...
双向BFS算法学习
双向BFS算法学习 推荐练习题 力扣“127”题:单词接龙 “752”题:打开轮盘锁 这里推荐一篇力扣题解 双向BFS 这里使用打开轮盘锁的题干进行举例: 你有一个带有四个圆形拨轮的转盘锁。每个拨轮都有10个数字: ‘0’, ‘1’, ‘2’,…...
C++从入门到精通---模版
文章目录 泛型编程函数模版模版参数的匹配原则类模版类模版的定义格式类模版的实例化 总结 泛型编程 泛型编程是一种编程范式,旨在实现通用性和灵活性。它允许在编写代码时使用参数化类型,而不是具体的类型,从而使代码更加灵活和可重用。 在…...
Unity数据持久化之Json
Json概述 Json是什么? 全称:JavaScript对象简谱(JavaScript Object Notation) Json是国际通用的一种轻量级的数据交换格式 主要在网络通讯中用于传输数据,或本地数据存储和读取 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率 我们一般使用Json文件来…...
LeetCode 35.搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 示例 1: 输入: nums [1,3,5,6], target 5 输出: 2 示例 2: 输入…...
速来get!多微信聚合聊天功能大揭秘!
随着网络时代的发展,微信成为了职场中不可或缺的沟通工具,很多人都有着多个微信号,而要想高效管理这些账号,那就少不了工具的帮忙。 通过微信管理系统,可以轻松实现多个微信号聚合聊天,提高沟通效率。 1、…...
【跟我学RISC-V】(一)认识RISC-V指令集并搭建实验环境
目录 写在前面 一、RISC-V指令集简介 1、什么是ISA 2、有哪些ISA 3、CISC和RISC 4、什么是RISC-V 1. RISC 的起源 2. RISC-I 和 RISC-II 3. RISC 发展和商业化 4. RISC-V 的诞生 5、RISC-V生态的特点 6、RISC-V指令集的特点 1. 开源 2. 社区化 3. 设计简洁 4. 模…...
开源轻量CRM系统skill-twenty-crm技术解析与全栈部署指南
1. 项目概述与核心价值最近在GitHub上看到一个挺有意思的项目,叫devchaudhary24k/skill-twenty-crm。光看这个名字,你可能会有点懵,这“Skill Twenty CRM”到底是个啥?作为一个在软件开发和团队协作领域摸爬滚打多年的老手&#x…...
【c++面向对象编程】第30篇:RAII与智能指针(一):auto_ptr的缺陷与unique_ptr
目录 一、一个手动管理的痛点 二、RAII 核心思想 三、auto_ptr:C98 的尝试与缺陷 auto_ptr 的核心缺陷 四、unique_ptr:真正的独占式智能指针 基本用法 常用成员函数 五、unique_ptr 与数组 六、自定义删除器 七、make_unique(C14&a…...
C#上位机与三菱PLC通信实战:从零构建GX Works3仿真平台
1. 为什么需要搭建GX Works3仿真平台 第一次接触三菱PLC开发的朋友们,可能都有这样的困惑:手头没有实体PLC设备,怎么测试自己写的控制程序?买一台FX5U PLC动辄几千元,对个人开发者来说成本太高。这时候仿真平台就成了最…...
Emacs实时语法检查优化:flymake-cursor插件实现光标悬停提示
1. 项目概述:Emacs 实时语法检查的得力助手如果你是一个 Emacs 用户,并且主要用它来写代码,那么你一定对“实时语法检查”这个功能不陌生。在编写代码时,能够即时看到潜在的错误、拼写问题或者代码风格警告,这能极大地…...
抖音批量下载神器:三步搞定无水印视频下载,告别手动烦恼
抖音批量下载神器:三步搞定无水印视频下载,告别手动烦恼 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser f…...
KMS智能激活工具:3个颠覆性技巧告别Windows和Office激活烦恼
KMS智能激活工具:3个颠覆性技巧告别Windows和Office激活烦恼 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 你是否曾经在准备重要演示时,Office突然弹出"许可证已过…...
新手避坑指南:用ROS Melodic在Ubuntu 18.04上为Dofbot机械臂配置MoveIt!
新手避坑指南:用ROS Melodic在Ubuntu 18.04上为Dofbot机械臂配置MoveIt! 第一次为Dofbot机械臂配置ROS Melodic和MoveIt时,很多新手会在环境搭建、依赖安装和配置文件调试等环节遇到各种"坑"。这些看似简单的问题往往耗费大量时间…...
VMOS+小黄鸟无root抓包实战:从环境搭建到证书导入的完整避坑指南
1. 为什么需要VMOS小黄鸟组合抓包 很多安卓开发者或者安全爱好者都遇到过这样的困扰:想要分析某个APP的网络请求,却发现抓包工具显示"无网络连接"。这种情况在安卓7.0及以上版本尤为常见,主要是因为系统加强了SSL证书验证机制。传统…...
06-AI产品的伦理边界-当上瘾设计遇上算法合规(系列二-上瘾模型的AI重构)
AI产品的伦理边界:当上瘾设计遇上算法合规本文是「上瘾模型的AI重构」系列的第6篇(系列收官)本文你将获得 🧠 上瘾设计的伦理困境全景📐 AI放大伦理风险的5个维度📊 “设计上瘾” vs "设计价值"的…...
RK3566(泰山派)实战:D310T9362V1SPEC触摸屏驱动从零适配与调试(竖屏)
1. RK3566与D310T9362V1SPEC屏幕简介 RK3566是瑞芯微推出的一款高性能嵌入式处理器,采用四核Cortex-A55架构,主频可达1.8GHz。这款芯片在工业控制、智能家居和物联网设备中广泛应用,特别适合需要图形显示和触摸交互的场景。我最近在一个智能终…...
