C++学习笔记总结练习:关联容器
关联容器
0 关联容器概述
关联容器与顺序容器的区别
- 关联容器和顺序容器有着根本不同。关联容器中的元素是按关键字来把偶才能和访问的。书序容器中的元素是按他们在容器中的位置来顺序保存和访问的。
两个基础类型
- map:键值对key-value。关键字是索引,值表示与索引相关的数据。
- set:每个元素只包含一个关键字。支持高校的关键字查询操作。
关联容器之间的区别
- 是一个set或者map
- 要求不重复的关键字,允许重复的关键字。
- 按顺序保存元素。无序保存。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hGBMDZXe-1690857764719)(image/2021-03-06-15-48-08.png)]
关联容器的头文件
<map>
:map,multimap<set>
:set,multiset<unorder_map>
:unorder_map,unorder_multimap<unorder_set>
:unorder_set,unorder_multiset
有序关联容器的原理
- 有序关联容器的底层一般使用红黑树实现。
- 泛型算法通常不对关联容器使用
无序关联容器的原理
- 一般使用hash表实现存储。
1 关联容器的通用操作
1.1 初始化
- 与容器部分的初始化一致。支持六种基本的初始化方法。默认初始化、值初始化、直接初始化、赋值初始化、列表初始化、迭代器初始化。不支持constructor(n)和constructor(n,t)的初始化。
- map、set的定义和初始化
map<string,int> word_count;//空容器
set<string> ex{"the","to"};//初始化set
map<string,int> wc{{"jo",10},{"yin",13},{"kang",53},{"long",3}
};//初始化map
- multimap、multiset的定义和初始化。允许关键字的重复。
//可以使用顺序容器初始化关联容器multiset初始化
vector<int> vec{1,2,3,4,5,5,4,3,2,1};
set<int> iset(vec.begin(),vec.end());
multiset<int> mset(vec.begin(),vec.end());
cout<<iset.size()<<endl;
cout<<mset.size()<<endl;
2.1 有序关联容器-map
存储内容
pair<key,value>
访问元素
方法 | 说明 |
---|---|
[key] | map的下标访问运算符。返回pair的值。如果没有该键。则会创建该键。 |
at(key) | map的键访问运算符。返回pair值。如果没有该键。会抛出异常。 |
iterator find(key) | 找到某个键。返回指向该键的迭代器。 |
int count(key) | 计算某个键的数量。返回该键出现的数量。 |
添加元素
- 关联容器的插入操作。通常不需要指定位置。
- 对于map和set而言。只有当关键字不在容器当中时才会进行插入。如果存在该元素则插入失败。
方法 | 说明 |
---|---|
pair<iterator,bool> emplace(args) | 使用args初始化一个值。插入到关联容器中。iterator指向插入的元素。bool指示是否插入成功。 |
pair<iterator,bool> insert(val) | 插入值为val的元素。 |
pair<iterator,bool> insert(iterator begin,iterator end) | 插入指定范围的元素。 |
pair<iterator,bool> insert({a,b,c,}) | 插入初值列表中的元素。 |
insert(p,v) | 迭代器只起到提示作用。返回值为迭代器,指向给定关键字的元素 |
emplace(p,args) | 迭代器起到提示作用。插入元素。返回值为迭代器。指向给定关键字的元素。 |
删除元素
方法 | 说明 |
---|---|
int erase(key) | 删除关键字为k的元素。返回删除的元素的数量。 |
iterattor erase(iterator p) | 删除迭代器p指向的元素。返回指向下一个元素的迭代器。这种东西都是遍历删除的时候用的。 |
erase(iterator begin(),iterator end()) | 删除范围内的元素。返回结尾e指向的元素。 |
2.2 有序管理容器-set
存储内容
key
访问操作
- 不支持[]和at()访问元素。支持find和count
添加操作
- 与map一样。只不过操作类型不是pair,而是单个的key
删除操作
- 与map一样。只不过操作类型不是pair,而是单个的key
3 无序关联容器
说明
- 不适用比较运算符来组织元素,使用哈希函数和关键字类型的==运算符。
- 使用无序容器通常更简单,具有更好的效果。
- 底层是通过哈希函数实现的。所以有很多关于哈希函数的处理操作。
基础操作
- 与有序关联容器一样
管理桶
- 无序关联容器相对于普通关联容器的特殊操作。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-e0WOBUTo-1690857764721)(image/2021-03-06-16-48-05.png)]
相关文章:
C++学习笔记总结练习:关联容器
关联容器 0 关联容器概述 关联容器与顺序容器的区别 关联容器和顺序容器有着根本不同。关联容器中的元素是按关键字来把偶才能和访问的。书序容器中的元素是按他们在容器中的位置来顺序保存和访问的。 两个基础类型 map:键值对key-value。关键字是索引,值表示与…...
TypeScript技能总结(二)
typescript是js的超集,目前很多前端框架都开始使用它来作为项目的维护管理的工具,还在不断地更新,添加新功能中,我们学习它,才能更好的在的项目中运用它,发挥它的最大功效 //readonly 只能修饰属性&#x…...
整理一些Postgresql工作中常用面试中会问的问题---Postgresql面试题001
1.什么是Postgresql TOAST? TOAST (The Oversized-Attribute Storage Technique,超大尺寸字段存储技术)主要用于存储大字段的值。 PostgreSQL 页面(page)大小是固定的(通常为8KB),且不允许tuples跨多个页面存储。因此不能存储非常大的字段值。为了克服这个限制,大字段…...

Xposed回发android.os.NetworkOnMainThreadException修复
最近用xposed进行hook回发的时候,又出现了新的问题; android.os.NetworkOnMainThreadException; 在Android4.0以后,写在主线程(就是Activity)中的HTTP请求,运行时都会报错,这是因为…...

【Leetcode】二叉树的最近公共祖先,二叉搜索树转换成排好序的双向链表,前序遍历与中序遍历构造二叉树
一.二叉树的最近公共祖先 链接 二叉树的最近公共祖先 题目再现 『Ⅰ』思路一:转换成相交链表问题 观察上图,节点1和节点4的最近公共祖先是3,这是不是很像相交链表的问题,关于相交链表,曾经我在另一篇文章里写到过&a…...

途乐证券|互联金融概念爆发,安硕信息“20cm”涨停,高伟达等大涨
互联金融概念4日盘中强势拉升,截至发稿,安硕信息“20cm”涨停,高伟达、卓创资讯、慧博云通涨超12%,恒银科技、极点软件亦涨停,指南针涨超9%,金证股份涨逾7%。 高伟达昨日在投资者互动平台表明,公…...

计数排序算法
计数排序 计数排序说明: 计数排序(Counting Sort)是一种非比较性的排序算法,它通过统计元素出现的次数,然后根据元素出现的次数将元素排列在正确的位置上,从而实现排序。计数排序适用于非负整数或者具有确…...
企业高性能web服务器-nginx
1.nginx简介: nginx是企业高可用的web服务器,nginx也可用来做反向代理服务器器,具有高并发,占用资源少,功能丰富,也可以作为简单的负载均衡。 nginx在企业中的功能: web服务软件 反向代理服务器…...

GaussDB数据库的元数据及其管理简介
目录 一、前言 二、元数据简介 1、元数据定义 2、元数据分类 3、数据库元数据管理 三、GaussDB数据库的元数据管理 1、GaussDB数据库的元数据管理 2、通过“SQL 系统表/系统视图/系统函数”的方式管理(采集)元数据 1)获取表、视图及…...
合并两个有序链表 LeetCode热题100
题目 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 思路 遍历两个链表比较大小,按从小到大添加到链表即可。 代码 /*** Definition for singly-linked list.* struct ListNode {* int val;* List…...

【C++】模拟实现string
目录 🌞专栏导读 🌛定义string类 🌛构造函数 🌛拷贝构造函数 🌛赋值函数 🌛析构函数 🌛[]操作符重载 🌛c_str、size、capacity函数 🌛比较运算符重载 &#…...

AI智慧安监视频监控汇聚平台EasyCVR调用接口出现跨域现象该如何解决?
视频监控汇聚EasyCVR可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有GB28181、RTSP/Onvif、RTMP等,以及厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等,能对外分发RTSP、RTMP、FLV、HLS、WebRTC等格式的视…...

无人机机巢有哪些,无人机机场/机场的主要分类
随着无人机技术的飞速发展,无人机已经渗透到了物流、农业、救援、公共安全等多个领域。而为了使这些无人机能更加高效、灵活地运行,一个新的概念应运而生,那就是无人机机巢(UAV Nest)。复亚智能无人机机巢是一种供无人…...

联想存储 HH0305_DE4000H 划分卷组、卷、主机
创建卷组 可使用卷组来创建可供主机访问的一个或多个卷。卷组是具有共同特性(如 RAID 级别和容量)的卷的容器。 关于本任务 如果拥有容量较大的驱动器且可以在控制器之间分发卷,则为每个卷组创建多个卷可以很好地利用存储容量和保护数据。…...

【Python机器学习】实验08 决策树
文章目录 决策树1 创建数据2 定义香农信息熵3 条件熵4 信息增益5 计算所有特征的信息增益,选择最优最大信息增益的特征返回6 利用ID3算法生成决策树7 利用数据构造一颗决策树Scikit-learn实例决策树分类决策树回归Scikit-learn 的决策树参数决策树调参 实验1 通过sk…...
MySQL的innoDB存储引擎如何解决幻读的问题?
MySQL的innoDB存储引擎如何解决幻读的问题 基本情况 MySQL有四种事务隔离级别,这四种隔离级别代表当存在多个事务并发冲突时,可能出现的脏读、不可重复读、幻读的问题InnoDB 在 RR 的隔离级别下 ,解决了幻读的问题幻读是指在同一个事务中&a…...

Web3.0:重新定义互联网的未来
💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! Web3.0:重新定义互联网的未来 Web3.0是指下一代互联网,也称为“分布式互联网”。相比于Web1.0和Web2.0,Web3.0具有更强的去中心化、…...

2023年还能选择前端吗?
前言 在Github2022的 Octoverse年度报告上,稳居最多使用榜首的语言可以看到是JavaScript,作为前端中最为关键的一部分,这说明即使现在,前端这一块仍然是大量的人涌进来,依然是火热,但是,一门语…...

sheetJs / xlsx-js-style 纯前端实现导出 excel 表格及自定义单元格样式
文章目录 一、安装二、创建基础工作表三、设置单元格宽度/高度/隐藏单元格四、分配数字格式五、超链接六、单元格注释七、公式八、合并单元格九、自定义单元格样式十、项目地址 一、安装 xlsx 地址:https://www.npmjs.com/package/xlsxSheetJs 地址:htt…...

Redis 报错 RedisConnectionException: Unable to connect to x.x.x.x:6379
文章目录 Redis报错类型可能解决方案 Redis报错类型 org.springframework.data.redis.connection. spingboot调用redis出错 PoolException: Could not get a resource from the pool; 连接池异常:无法从池中获取资源; nested exception is io.lettuce.core. 嵌套异常 RedisConn…...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

从WWDC看苹果产品发展的规律
WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂
蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止
<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet: https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...
将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?
Otsu 是一种自动阈值化方法,用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理,能够自动确定一个阈值,将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...
GitHub 趋势日报 (2025年06月08日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...
大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计
随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”
2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...