set和map的相关知识介绍

一.序列式容器和关联式容器

1.序列式容器:

<1>之前介绍的string、vector、list、deque等这些容器统称为序列式容器

<2>序列式容器逻辑结构通常是线性结构

<3>序列式容器中的元素是按他们在容器中的存储位置来顺序保存和访问的

2.关联式容器:

<1>关联式容器有map/set系列和unordered_map/unordered_set系列

<2>关联式容器逻辑结构通常是非线性结构

<3>顺序容器中的元素是按关键字来保存和访问的

注:map和set底层是红⿊树,红⿊树是⼀颗平衡⼆叉搜索树。set是key搜索场景的结构,map是key/value搜索场景的结构。

二.set系列

注:文档链接:set - C++ Reference (cplusplus.com)

1.set类的介绍

<1>set默认要求T(关键字类型)⽀持⼩于⽐较,如果想按⾃⼰的需求⾛可以⾃⾏实现仿函数传给第⼆个模版参数

<2>set底层存储数据的内存是从空间配置器申请的

<3>set底层是⽤红⿊树实现,增删查效率是O(logN)迭代器遍历是⾛的搜索树的中序遍历

2.set的构造和迭代器

<1>set的⽀持正向和反向迭代遍历,遍历默认按升序顺序,因为底层是⼆叉搜索树,迭代器遍历⾛的中序

<2>set的iterator和const_iterator都不⽀持迭代器修改数据,因为修改关键字数据,会破坏底层搜索树的结构。

3.set的增删查:具体实现参考文献

4.set和multiset的区别:

<1>set不支持重复数据的插入,multiset支持数据冗余

<2>multiset在find时,有多个key,会返回中序遍历的第⼀个

三.map系列

注:文档链接:map - C++ Reference (cplusplus.com)

1.map类的介绍

<1>Key就是map底层关键字的类型,T是map底层value的类型

<2>map默认要求Key⽀持⼩于⽐较,如果需要的话可以⾃⾏实现仿函数传给第⼆个模版参数

<3>map底层存储数据的内存是从空间配置器申请的

<4>map底层是⽤红⿊树实现,增删查改效率是O(logN),迭代器遍历是⾛的中序遍历,所以是按key有序顺序遍历的

<5>map底层的红⿊树节点中的数据,使⽤pair<Key,T>存储键值对数据。

补充:pair类的介绍

(1)文档链接:pair - C++ Reference (cplusplus.com)

(2)其实pair可以视为一个存有两个元素的小数组,将具有一定联系的两个值放在pair里面,想用的时候可以直接拿出来,避免了无法同时找到与它关联值的困扰

2.map的构造

<1>map的⽀持正向和反向迭代遍历,遍历默认按key的升序顺序,因为底层是⼆叉搜索树,迭代器遍历⾛的中序

<2>map⽀持修改value数据,不⽀持修改key数据,因为修改关键字数据,会破坏底层搜索树的结构。

3.map的增删查:具体实现参考文献

注:map的增删与set的使用大体相同,但是map的find返回的是iterator,不仅可以确认key在不在,还可以找到key映射的value,同时通过迭代还可以修改value

4.map的修改

<1>map第⼀个⽀持修改的⽅式时通过迭代器,迭代器遍历时或者find返回key所在的iterator修改

<2>通过接口operator[]修改数据,但是operator[]不仅仅⽀持修改,还⽀持插⼊数据和查找数据

注:map的operator[]的用法与之前学过的不太一样,这里不再用于通过下标定位数据了,而是利用迭代器实现数据的插入,查找与修改

5.map和multimap的区别

<1>multimap⽀持键值key冗余

<2>multimap在find时,有多个key,会返回中序遍历的第⼀个

<3>multimap不⽀持[],因为⽀持key冗余,无法根据key定位相应的value值

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

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

相关文章

AI驱动的智能运维:行业案例与挑战解析

华为、蚂蚁、字节跳动如何引领智能运维&#xff1f; ©作者|潇潇 来源|神州问学 引言 OpenAI 发布的 ChatGPT 就像是打开了潘多拉的魔盒&#xff0c;释放出了生产环境中的大语言模型&#xff08;LLMs&#xff09;。一些新的概念&#xff1a;“大语言模型运维 (LLMOps)”…

防火墙会话表解析

华为防火墙的会话表是防火墙用于记录和管理网络会话的重要数据结构&#xff0c;它对于实现精确的流量控制和安全管理起着至关重要的作用。以下是对华为防火墙会话表的详细解析&#xff1a; 一、会话表的作用 会话表主要用于记录TCP、UDP、ICMP等协议连接的状态信息&#xff0c;…

数据结构:链表算法题

目录 题1.删除链表中的某个元素val题目表述&#xff1a;思路1:在源链表中进行删除更改思路2:创建一个新链表 题2:反转一个链表问题描述&#xff1a;思路1:在源链表内部进行操作思路2:创建一个新链表 题3:寻找链表中间位置题目描述:思路1:思路2:快慢指针 题1.删除链表中的某个元…

003、网关路由问题

1. nginx配置404跳转回默认路由 https://blog.csdn.net/masteryee/article/details/83689954 https://blog.csdn.net/IbcVue/article/details/133230460 https://www.jb51.net/server/317970ynk.htm https://blog.csdn.net/u014438244/article/details/120531287 https://blog…

快速上手Make Sense:在线标注数据集的强大工具

链接&#xff1a; Makesense汉化版本 Makesense英文版 随着深度学习在计算机视觉领域的广泛应用&#xff0c;数据集标注成为了一项重要的任务。Make Sense正是一个为图像数据集提供标注功能的在线工具。其易用性和强大的功能使得它在众多标注工具中脱颖而出。本文将为你详细介绍…

搭建高效知识库:教培机构数字教学的关键一步

在数字化时代&#xff0c;教育培训行业正经历着前所未有的变革。随着在线教育的兴起和个性化学习需求的增长&#xff0c;构建一个高效、易用的知识库已成为教培机构提升教学质量、优化学习体验、增强竞争力的关键一步。本文将深入探讨构建高效知识库的重要性&#xff0c;以及如…

分享段 HTML to PDF 的 NodeJs代码

最近工具箱增加的一个功能&#xff1a; 代码如下&#xff1a; const puppeteer require(puppeteer); const moment require(moment);const TAG [convertTopPdf];async function html2pdf(url, wantFileName) {console.log(TAG, convertTopPdf start, url:, url);const no…

QT 获取视频帧Opencv获取清晰度

先展示结果&#xff1a; 1.获取摄像头的分辨率 mResSize.clear();mResSize camera_->supportedViewfinderResolutions();ui->comboBox_resulation->clear();int i0;foreach (QSize msize, mResSize) {qDebug()<<msize;ui->comboBox_resulation->addItem(…

mp4(H.265编码)转为本地RTSP流

目标&#xff1a;获得H265码流&#xff0c;要么通过在线网址&#xff0c;要么获得H265文件自己产生码流 在以下任意网址中下载得到H265编码的MP4文件 http://www.elecard.com/en/download/videos.html http://ultravideo.cs.tut.fi/#testsequences http://4k.cablelabs.com/](…

数据库软题4-关系代数转SQL语言

题1 因为是笛卡尔积 <ABCD CDE> <1234 567> 笛卡尔积 RxS FROM R&#xff0c;S题2 题3 题4 题5

图像分割(九)—— Mask Transfiner for High-Quality Instance Segmentation

Mask Transfiner for High-Quality Instance Segmentation Abstract1. Intrudouction3. Mask Transfiner3.1. Incoherent Regions3.2. Quadtree for Mask RefinementDetection of Incoherent Regions四叉树的定义与构建四叉树的细化四叉树的传播 3.3. Mask Transfiner Architec…

【JavaScript】搭建一个具有记忆的简洁个人待办网页

1. HTML 结构 文档类型声明&#xff1a;<!DOCTYPE html>这告诉浏览器这是一个 HTML5 文档。HTML 标签&#xff1a;<html lang"zh-CN">表示整个页面的内容&#xff0c;lang"zh-CN" 表示内容使用简体中文。头部信息&#xff1a;<head><…

文笔差只因没找对工具,这5个AI帮你变身写作高手!

在详细评估了超过二十种AI写作辅助应用后&#xff0c;我挑选了四款特别出色的工具来向您介绍。这些工具不仅能显著提高您的写作速度&#xff0c;而且在特定用途下能够创造出优秀的内容&#xff0c;从而避免了一些常见的AI写作缺陷。 通常情况下&#xff0c;对AI生成内容感到不…

【漏洞复现】Yearning数据库审计平台 front 任意文件读取漏洞

一、产品介绍 一款MYSQL SQL语句/查询审计开源工具&#xff0c;Yearning支持SQL查询、SQL审核、推送、用户权限及管理等功能&#xff0c;为DBA与开发人员使用&#xff0c;简单高效的MYSQL审计平台。 二、漏洞描述 该系统Yearning 2.3.1 版本、Interstellar GA 2.3.2 版本和 N…

Mybatis详细教程 (万字详解)

Mybatis 3.5.14 来自于B站‘天气预报’,一名宝藏up,跟着他可以培养起独立解决编程问题的能力&#xff01;&#xff01;&#xff01; 01.简介 1.1 官网 官方中文网: MyBatis中文网 中文网参考手册 1.2 概念 MyBatis 是一款优秀的持久层框架&#xff0c;支持自定义 SQL, 存储过…

【含文档】基于Springboot+Vue的高校竞赛管理系统(含源码+数据库+lw)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 系统定义了三个…

机器学习学习笔记-20240927

文章目录 一些简单的指令数据操作广播机制 标量&#xff0c;向量&#xff0c;矩阵的相互求导1. 标量对标量的求导2. 标量对向量的求导3. 向量对标量的求导4. 向量对向量的求导5. 矩阵对标量的求导6. 矩阵对向量的求导 链式求导法则YYDS求出损失函数偏导为0时的最优解w*1. 损失函…

昇思MindSpore进阶教程-格式转换

大家好&#xff0c;我是刘明&#xff0c;明志科技创始人&#xff0c;华为昇思MindSpore布道师。 技术上主攻前端开发、鸿蒙开发和AI算法研究。 努力为大家带来持续的技术分享&#xff0c;如果你也喜欢我的文章&#xff0c;就点个关注吧 MindSpore中可以把用于训练网络模型的数据…

打造未来社交:区块链社交DAO的颠覆性开发之路

随着区块链技术的不断发展&#xff0c;去中心化自治组织&#xff08;DAO&#xff09;逐渐成为一种创新的社交模式。结合区块链的透明性和不可篡改性&#xff0c;社交DAO为用户提供了一种全新的参与和治理方式&#xff0c;重塑了社交网络的构建与互动方式。本文将探讨区块链社交…

【鸿蒙】HarmonyOS NEXT应用开发快速入门教程之布局篇(上)

系列文章目录 【鸿蒙】HarmonyOS NEXT开发快速入门教程之ArkTS语法装饰器&#xff08;上&#xff09; 【鸿蒙】HarmonyOS NEXT开发快速入门教程之ArkTS语法装饰器&#xff08;下&#xff09; 【鸿蒙】HarmonyOS NEXT应用开发快速入门教程之布局篇&#xff08;上&#xff09; 文…