5.3 C++ 容器的嵌套

news2024/12/14 15:29:26

一)容器嵌套的概念
在 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中添加元素,每个键对应一个vector
    myMap[1].push_back(10);
    myMap[1].push_back(20);
    myMap[2].push_back(30);
    // 遍历map
    for (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.coloradmin.cn/o/2259396.html

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

相关文章

考研数学【线性代数基础box(数二)】

本文是对数学二线性代数基础进行总结&#xff0c;一些及极其简单的被省略了&#xff0c;代数的概念稀碎&#xff0c;不如高数关联性高&#xff0c;所以本文仅供参考&#xff0c;做题请从中筛选&#xff01; 本文为初稿&#xff0c;后面会根据刷题和自己的理解继续更新 第一章…

全面解析租赁小程序的功能与优势

内容概要 租赁小程序正在逐渐改变人与物之间的互动方式。通过这些小程序&#xff0c;用户不仅可以轻松找到所需的租赁商品&#xff0c;还能够享受无缝的操作体验。为了给大家一个清晰的了解&#xff0c;下面我们将重点介绍几个核心功能。 建议&#xff1a;在选择租赁小程序时&…

Linux DNS 协议概述

1. DNS 概述 互联网中&#xff0c;一台计算机与其他计算机通信时&#xff0c;通过 IP 地址唯一的标志自己。此时的 IP 地址就类似于我们日常生活中的电话号码。但是&#xff0c;这种纯数字的标识是比较难记忆的&#xff0c;而且数量也比较庞大。例如&#xff0c;每个 IPv4 地址…

Java使用ORM Bee自动生成Javabean.

Java使用ORM Bee自动生成Javabean. 配置数据库连接,添加了pom.xml依赖后,就可以写Java代码,自动生成Javabean了. 可参考:https://gitee.com/automvc/bee https://github.com/automvc/bee 还可以生成字段文件, 这样可以避免硬编码引用字段,速度也比反射快. package org.tea…

【MySQL中多表查询和函数】

目录 1.多表查询 1.1 外键 1.2 链接查询 2.MySQL函数 内置函数简介 数值函数 字符串函数 时间日期函数 条件判断操作 开窗函数 1.多表查询 本质&#xff1a;把多个表通过主外键关联关系链接&#xff08;join&#xff09;合并成一个大表&#xff0c;在去单表查询操作…

二维码数据集,使用yolov,voc,coco标注,3044张各种二维码原始图片(未图像增强)

二维码数据集&#xff0c;使用yolov&#xff0c;voc&#xff0c;coco标注&#xff0c;3044张各种二维码原始图片&#xff08;未图像增强&#xff09; 数据集分割 训练组70&#xff05; 2132图片 有效集20&#xff05; 607图片 测试集10&#xff05; 305图…

MySQL多表查询时有哪些连接方式?

大家好&#xff0c;我是锋哥。今天分享关于【MySQL多表查询时有哪些连接方式?】面试题。希望对大家有帮助&#xff1b; MySQL多表查询时有哪些连接方式? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在 MySQL 中进行多表查询时&#xff0c;常见的连接方式有以下…

LBS 开发微课堂|通过openGL ES轻松实现建筑物渲染及动画

为了让广大开发者 更深入地了解 百度地图开放平台的 技术能力 轻松掌握满满的 技术干货 更加简单地接入 位置服务 我们特别推出了 “位置服务&#xff08;LBS&#xff09;开发微课堂” 系列技术案例 第五期的主题是 通过openGL ES轻松实现 建筑物渲染及动画 对于…

Java——IO流(下)

一 (字符流扩展) 1 字符输出流 (更方便的输出字符——>取代了缓冲字符输出流——>因为他自己的节点流) (PrintWriter——>节点流——>具有自动行刷新缓冲字符输出流——>可以按行写出字符串&#xff0c;并且可通过println();方法实现自动换行) 在Java的IO流中…

SQLServer到MySQL的数据高效迁移方案分享

SQL Server数据集成到MySQL的技术案例分享 在企业级数据管理中&#xff0c;跨平台的数据集成是一个常见且关键的任务。本次我们将探讨如何通过轻易云数据集成平台&#xff0c;将巨益OMS系统中的退款单明细表从SQL Server高效、安全地迁移到MySQL数据库中。具体方案名称为“7--…

每日计划-1213

1. 完成 SQL2 查询多列 https://www.nowcoder.com/exam/oj?page1tabSQL%E7%AF%87topicId199 2. 八股部分 1) C 中面向对象编程如何实现数据隐藏&#xff1f; 在c中&#xff0c;可以将数据成员声明为私有或受保护&#xff0c;并提供公有的成员函数来访问和修改这些数据成员&am…

ORACLE 导入导出数据库(包含表结构和数据)

导出 1、进入本地oracle 驱动安装目录下–> 进入CMD 2、输入命令 exp 用户名/密码10.xx.xx.xx:1521/orcl fileexport.dmp 3、查看导出的文件 导入 1、进入本地oracle 驱动安装目录下–> 进入CMD 2、输入命令 imp 用户名/密码10.xx.xx.xx:1521/orcl fully ignorey…

Qt之将源代码封装成库文件使用(五)

Qt开发 系列文章 - Code-To-Library&#xff08;五&#xff09; 目录 前言 一、库文件 二、直接封装方式 1.静态库封装 2.动态库封装 3.其它库类型 三、二次重写封装 四、库的使用 1.移植库及头文件 2.添加外部库 总结 前言 库文件是计算机上的一类文件&#xff0c…

视频监控汇聚平台方案设计:Liveweb视频智能监管系统方案技术特点与应用

随着科技的发展&#xff0c;视频监控平台在各个领域的应用越来越广泛。然而&#xff0c;当前的视频监控平台仍存在一些问题&#xff0c;如视频质量不高、监控范围有限、智能化程度不够等。这些问题不仅影响了监控效果&#xff0c;也制约了视频监控平台的发展。 为了解决这些问…

跨平台开发技术的探索:从 JavaScript 到 Flutter

随着多平台支持和用户体验一致性在应用程序开发中变得越来越重要,开发者面临的挑战是如何在不同平台上保持代码的可维护性和高效性。本文将探讨如何利用现代技术栈,包括 Flutter、JavaScript、HTML5、WebAssembly、TypeScript 和 Svelte,在统一的平台上进行高效的跨平台开发…

Dcoker安装nginx,完成反向代理和负载均衡

1. 简介 官网&#xff1a;nginx Nginx是一个高性能的 HTTP 和反向代理 Web 服务器。它的主要功能包括反向代理、负载均衡和动静分离等。正因为 Nginx的这些功能能够为系统带来性能和安全方面的诸多优势&#xff0c;我们在项目部署时需要引入 Nginx组件。接下来我们会逐一向大…

Allegro X PCB设计小诀窍--如何在Allegro X中进行PCB设计评审

背景介绍&#xff1a;在PCB设计过程中&#xff0c;企业为了提升PCB设计质量&#xff0c;确保PCB设计的可制造性&#xff0c;缩短产品的研发周期&#xff0c;通常需要组织对PCB进行设计评审。但是目前的PCB设计评审过程存在评审文档管理繁琐、意见反馈不及时、问题传递不准确、评…

基于多视角深度学习技术的乳腺X线分类:图神经网络与Transformer架构的研究|文献速递-生成式模型与transformer在医学影像中的应用速递

Title 题目 Mammography classification with multi-view deep learning techniques:Investigating graph and transformer-based architectures 基于多视角深度学习技术的乳腺X线分类&#xff1a;图神经网络与Transformer架构的研究 01 文献速递介绍 乳腺X线检查是乳腺癌…

HCIA-Access V2.5_2_3_网络通信基础_以太网概述

什么是以太网 以太网是由IEEE定义的局域网技术&#xff0c;也是目前应用最普遍的技术&#xff0c;早期的令牌环网&#xff0c;FDDI等局域网技术都被它取代了&#xff0c;以太网主要分为两类&#xff0c;共享型以太网和交换型以太网。共享式以太网主要采用总线型的拓扑结构&…

Maven学习(Maven项目模块化。模块间“继承“机制。父(工程),子项目(模块)间聚合)

目录 一、Maven项目模块化&#xff1f; &#xff08;1&#xff09;基本介绍。 &#xff08;2&#xff09;汽车模块化生产再聚合组装。 &#xff08;3&#xff09;Maven项目模块化图解。 1、maven_parent。 2、maven_pojo。 3、maven_dao。 4、maven_service。 5、maven_web。 6…