5.3 C++ 容器的嵌套

一)容器嵌套的概念
在 C++ 中,容器嵌套是指将一种容器类型作为另一种容器的元素。这允许创建更复杂的数据结构,以满足各种编程需求。例如,可以将一个vector容器放入另一个vector容器中,或者将一个map容器的元素设置为list容器等。
常见的容器嵌套方式及示例
1)vector嵌套vector(二维数组类似结构)
示例代码:

#include <iostream>
#include <vector>
int main() 
{// 创建一个二维vector,相当于一个矩阵std::vector<std::vector<int>> matrix;// 初始化一个3x3的矩阵matrix.resize(3);for (int i = 0; i < 3; ++i){matrix[i].resize(3);}// 填充矩阵元素for (int i = 0; i < 3; ++i){for (int j = 0; j < 3; ++j) {matrix[i][j] = i * 3 + j;}}// 输出矩阵元素for (int i = 0; i < 3; ++i) {for (int j = 0; j < 3; ++j) {std::cout << matrix[i][j] << " ";}std::cout << std::endl;}return 0;
}

解释:
首先创建了一个std::vector<std::vector>类型的对象matrix,它是一个嵌套的vector,外层vector可以看作是行,内层vector看作是列。通过resize方法初始化了一个 3x3 的矩阵结构,然后使用嵌套的循环填充矩阵元素,最后再使用嵌套循环输出矩阵元素。这种结构类似于二维数组,但具有动态大小的优点,可以方便地添加或删除行和列。
2)map嵌套vector(关联容器与序列容器组合)
示例代码:

#include <iostream>
#include <map>
#include <vector>
int main() 
{// 创建一个map,键为整数,值为vector<int>std::map<int, std::vector<int>> myMap;// 向map中添加元素,每个键对应一个vectormyMap[1].push_back(10);myMap[1].push_back(20);myMap[2].push_back(30);// 遍历mapfor (auto it = myMap.begin(); it!= myMap.end(); ++it){std::cout << "Key: " << it->first << ", Values: ";for (int val : it->second){std::cout << val << " ";}std::cout << std::endl;}return 0;
}

解释:
定义了一个std::map<int, std::vector>类型的对象myMap,它的键是整数类型,值是vector类型。通过myMap[1].push_back(10)这种方式,先根据键获取对应的vector(如果键不存在,会自动创建一个空的vector),然后向vector中添加元素。在遍历map时,通过迭代器it获取键it->first和值(vector)it->second,再遍历vector输出其中的元素,这种结构可以用于根据某个键来关联一组数据,比如可以根据学生的学号(键)来关联该学生的成绩列表(vector值)。
3)set嵌套map(复杂关联结构)
示例代码:

#include <iostream>
#include <set>
#include <map>
int main() 
{// 创建一个set,其中的元素是map<int, int>std::set<std::map<int, int>> mySet;// 创建一个map元素添加到set中std::map<int, int> myMap1;myMap1[1] = 10;myMap1[2] = 20;mySet.insert(myMap1);// 遍历set中的map元素for (auto itSet = mySet.begin(); itSet!= mySet.end(); ++itSet) {for (auto itMap = (*itSet).begin(); itMap!= (*itSet).end(); ++itMap){std::cout << "Key: " << itMap->first << ", Value: " << itMap->second << " ";}std::cout << std::endl;}return 0;
}

解释:
这里定义了一个std::set<std::map<int, int>>类型的对象mySet,它的元素是map<int, int>类型。首先创建一个map对象myMap1并填充元素,然后将其插入到set中。在遍历set中的map元素时,需要使用两层嵌套的迭代器。外层迭代器itSet用于遍历set,内层迭代器itMap用于遍历set中的每个map元素。这种嵌套结构可以用于存储和处理一组具有相同键 - 值对结构的关联数据集合,并且利用set的特性来保证这些map元素的唯一性(根据map的比较规则来确定唯一性)。
二)容器嵌套的应用场景
数据存储和表示复杂关系:
在处理具有层次结构的数据时非常有用。例如,在一个组织结构图中,可以使用vector嵌套vector来表示部门和员工的关系,外层vector表示部门,每个部门对应的内层vector表示该部门的员工。
实现图数据结构:
对于图这种数据结构,可以使用vector嵌套vector来实现邻接表表示法。例如,graph[i]表示与节点i相邻的节点列表,通过这种方式可以方便地存储和处理图的相关信息,如广度优先搜索、深度优先搜索等算法。
管理多组关联数据:
如在一个学校成绩管理系统中,map嵌套vector可以用于存储每个班级(键)的学生成绩列表(值),方便对每个班级的成绩进行统计和分析。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

spark读取普通文件

spark读取普通文件 txt文件 """ 将一行数据当做一个字段&#xff0c;需要自己切割 字段名称为value 表结构 可以从sql中搞 """ df spark.read.text("../../data/wordcount/input/data.txt") df spark.read.format("text"…

手机实时提取SIM卡打电话的信令声音--社会价值(一、方案解决了什么问题)

手机实时提取SIM卡打电话的信令声音 --社会价值(一、方案解决了什么问题) 一、前言 这段时间&#xff0c;我们在技术范围之外陷入了一个自证或者说下定义的怪圈&#xff0c;即要怎么样去介绍或者描述&#xff1a;我们是一个什么样的产品。它在当前这个世界上&#xff0c;处于…

【LeetCode】每日一题 2024_12_13 K 次乘运算后的最终数组 I(暴力)

前言 每天和你一起刷 LeetCode 每日一题~ 小聊两句 1、今天是 12.13 南京大屠杀国家公祭日。铭记历史&#xff0c;勿忘国耻。 2、今天早上去看了 TGA 年度游戏颁奖&#xff0c;小机器人拿下了年度最佳游戏&#xff0c;所有人都震惊了&#xff0c;大伙纷纷问到&#xff0c;谁…

算法刷题Day16: BM41 输出二叉树的右视图

题目链接 描述 思路&#xff1a; 递归构造二叉树在Day15有讲到。复习一下&#xff0c;就是使用递归构建左右子树。将中序和前序一分为二。 接下来是找出每一层的最右边的节点&#xff0c;可以利用队列层次遍历。 利用队列长度记录当前层有多少个节点&#xff0c;每次从队列里…

【修改源码】解决el-select值不匹配导致回显id、只能搜索label无法搜索value的问题

问题一&#xff1a;el-select值不匹配导致回显id&#xff08;此时只针对单选进行处理&#xff09; el-select数据的回显是根据id去匹配值的&#xff0c;最近项目出现了回显id的情况&#xff0c;原因是没有匹配的option 问题场景图如下&#xff1a; 解决方案 1、方法一&#xf…

Docker的初识

目录 1. 容器技术发展史1.1 Jail 时代1.2 云时代1.3 云原生时代1.3.1 Google & Docker 竞争1.3.2 k8s 成为云原生事实标准 2. 虚拟化和容器化的概念2.1 什么是虚拟化、容器化2.2 为什么要虚拟化、容器化&#xff1f;2.3 虚拟化实现方式2.3.1 应用程序执行环境分层2.3.2 虚拟…

【开源大屏】玩转开源积木BI,从0到1设计一个大屏

积木 BI 重磅推出免费大屏设计器&#xff01;功能超强大&#xff0c;操作超流畅&#xff0c;体验超酷炫。快来体验一下吧。 让我们一起来看一下如何从0到1设计一个大屏。 一、积木BI大屏介绍 积木BI可视化数据大屏 是一站式数据可视化展示平台&#xff0c;旨在帮助用户快速通…

挑食的机器

描述 未来世界有群机器人&#xff0c;他们以阿拉伯数字为食。但其中有个机器人Tom从小到大都不吃质数&#xff0c;为了Tom的健康着想&#xff0c;医生建议Tom有计划的只吃质数&#xff0c;以保证营养均衡。但超市的货架上只有从1到105并且按顺序排列好的实物售卖&#xff0c;所…

HarmonyOS 线性容器ArrayList 常用的几个方法

ArrayList是一种线性数据结构&#xff0c;底层基于数组实现。ArrayList会根据实际需要动态调整容量&#xff0c;每次扩容增加50%。 ArrayList和Vector相似&#xff0c;都是基于数组实现。它们都可以动态调整容量&#xff0c;但Vector每次扩容增加1倍。 ArrayList和LinkedList相…

leetcode230.二叉搜索树中第k小的元素

标签&#xff1a;二叉搜索树&#xff1b;中序遍历 给定一个二叉搜索树的根节点 root &#xff0c;和一个整数 k &#xff0c;请你设计一个算法查找其中第 k 小的元素&#xff08;从 1 开始计数&#xff09;。 示例 1&#xff1a; 输入&#xff1a;root [3,1,4,null,2], k 1…

如何在两台 PostgreSQL 服务器之间使用逻辑复制槽进行数据复制

如何在两台 PostgreSQL 服务器之间使用逻辑复制槽进行数据复制 如何在两台 PostgreSQL 服务器之间使用逻辑复制槽进行数据复制环境准备1. 配置主服务器&#xff08;Publisher&#xff09;1.1 修改 postgresql.conf1.2 修改 pg_hba.conf1.3 重启 PostgreSQL 服务1.4 创建逻辑复制…

苹果开发者入门:修复 SwiftUI 中“跑偏的”动画(下)

概述 大家知道 SwiftUI 不仅仅是一款 App 界面布局的超级利器&#xff0c;它同样提供了花样百出的动画和转场机制将 UI 世界点缀的“楚楚动人”。不过&#xff0c;对于苹果开发新入门的秃头小码农来说&#xff0c;使用动画貌似没有想象的那么易如反掌。 如上图所示&#xff0c…

kafka-clients之监控

以生产者为例介绍spring如何整合kafka-clients&#xff0c;micrometer&#xff0c;prometheus。上报生产者监控打点 可以通过在Spring Boot应用中手动添加Kafka Producer的度量监控&#xff0c;确保Prometheus能够采集到Producer的指标。以下是一个示例代码&#xff0c;其中使…

【万字详解】三维重建(二)——NeRF、NeuS、MeshUDF、NeuralUDF、3DGS、GShell

文章目录 一、NeRF:Representing Scenes as Neural Radiance Fields for View Synthesis(推荐读)1.1 式1 神经网络的输入和输出1.2 式2 体素渲染算法1.3 式3 损失函数1.4 位置编码1.5 基本原理二、经典的重建流程2.1 传统的三维重建pipeline2.2 神经网络回归2.3 可微渲染最优…

优化Go语言中的网络连接:设置代理超时参数

网络连接优化的重要性 在分布式系统和微服务架构中&#xff0c;网络请求的效率直接影响到整个系统的响应速度。合理的超时设置可以防止系统在等待网络响应时陷入无限期的阻塞&#xff0c;从而提高系统的吞吐量和用户体验。特别是在使用代理服务器时&#xff0c;由于增加了网络…

【人工智能解读】神经网络(CNN)的特点及其应用场景器学习(Machine Learning, ML)的基本概念

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c; 忍不住分享一下给大家。点击跳转到网站 学习总结 1、掌握 JAVA入门到进阶知识(持续写作中……&#xff09; 2、学会Oracle数据库入门到入土用法(创作中……&#xff09; 3、手把…

颜色的基本处理

数码相机能够获取彩色图像&#xff0c;但相机的色彩处理是一个非常复杂的过程&#xff0c;是非常重要的。 此过程生产制造商在细节方面都是不公布的&#xff0c;但是基本的概念是相同的。当相机捕捉一个真实场景时&#xff0c;是怎么还原成人眼所看到的图像呢&#xff1f; 1.R…

OpenCV 功能函数介绍 (二)

一&#xff0c;梯度处理的sobel算子函数 功能&#xff1a; 用于计算图像梯度&#xff08;gradient&#xff09;的函数 参数&#xff1a; cv2.Sobel(src, ddepth, dx, dy, ksize3, scale1, delta0, borderTypeNone) cv2.Sobel&#xff08;输入图像 &#xff0c; 应该是灰…

PostgreSQL JSON/JSONB 查询与操作指南

PostgreSQL 提供了强大的 JSON 和 JSONB 数据类型及相关操作&#xff0c;适用于存储和查询半结构化数据。本文将详细介绍其常用操作。 1. 基础操作 1.1 JSON 属性访问 ->: 返回 JSON 对象中的值&#xff0c;结果为 JSON 格式。 SELECT {"a": {"b": 1…

《宇宙机器人》提示错误弹窗“找不到d3dx9_43.dll”是什么原因?“d3dx9_43.dll缺失”怎么解决?

电脑游戏运行时常见问题解析&#xff1a;《宇宙机器人》提示“找不到d3dx9_43.dll”的解决之道 TGA2024落幕&#xff0c;年度最佳游戏——《宇宙机器人》&#xff0c;作为一名在软件开发领域深耕多年的从业者&#xff0c;我深知电脑游戏在运行过程中可能会遇到的各种挑战&…