28map,set关联式容器

news2024/9/28 17:51:45

序列式容器 vector、list、deque(单纯的纯数据)

关联式容器 map、set,哈希,,,(数据之间有很强的关联性,不是单纯的为了存储数据)

Set

底层是搜索树(红黑树)

T是key ,compare是仿函数,alloc是空间配置器(暂不用管)

set不支持修改 *it=10(错误)

遍历出来的结果是升序(中序遍历)不允许有重复值

set可以用范围for,因为他支持迭代器

pair 

是个类

set的insert会判断是否有重复的,重复就不插入(所以有bool类型判断)返回类型是pair

insert的返回值  第一个参数是iterator,第二个是bool

pair有两个成员  第一个first ,第二个second

 类外面用要指定内域

erase

删除是指即使不存在的位置也没有什么影响(返回值是size_type=size_t)

可以删除指定位置(位置是find返回的迭代器位置)

 

如果找的不存在返回的就是end()迭代器不存在的位置删除会报错

erase(end)就会崩溃

删除不存在的值没影响

find

找到就返回该位置的迭代器,找不到就返回end

lower_bound

给一个值,返回一个迭代器 

如果lower_bound(25)也是删除30-60,他返回大于等于(upper返回>val的值)val值的迭代器

 equal_range

返回这个值和比他大的另一个值

first是>=val的值,second是>val的值

count 

返回val的个数(判断在不在)

multiset

允许已经存在的节点再次插入(变异搜索树)

遇到相同放在左右都一样,长了就旋转

那他的迭代器返回那一个重复的元素呢?返回中序第一个val

equal-range对于mutiset来说可以删除指定重复的所有这个数

此时count()在这里就可以方便查询重复元素个数

erase()在mulset中 他把重复的数都删除了,删除多少个可以返回一个size_t

总结:查找在不在,排序+去重

而multiset也可以去重

map

key v模型,底层是树

他有两个模版参数

insert

两个模版参数但是insert只有一个值,这个值是value—type类型的值,他的value—type

是一个pair类型,有两个模版参数first是key,second是val

注意这里key前面是const,set不可以修改,map是不想key被修改,只让val修改

(const也不用写内部会转换)

但是first也可以不写const 为什么呢?(内部会转换)

同一个模版模版参数不一样就是不一样的类型

string形参是const string

pair支持带参的构造和无参的构造,和拷贝构造(原因就在这)

 此时如果传const string,string就是拷贝构造,如果传const char*,const char*就变成了构造

 make pair函数模版

函数模版特点就是可以自己推演模版参数

pair用的时候需要显示的实例化,而makepair他会自己推导

而makepair他会自己推导 ,基于上面解释过为什么以传const char*类型,这里就不仅可以判断出,right,和右边的类型是const char*(pair有构造),而且可以传两个string对象 

 插入的是pair类型所以迭代器*it=是pair *it.first是第一个值,second是第二个值

 

list<Date>自定义类型指针用的是-> 

第一个->是函数调用调用重载函数返回的是pair*再->指向first

 这里范围for加上引用,dict装换成迭代器 it 然后*it(*it里面还是string,代价大)一次给kv不加引用就是拷贝

其次first不能修改,second可以修改,kv前面没有const,不然first和second都不能修改

那为什么first不能修改?因为pair里面first前面有const

map统计次数

ret是个迭代器用迭代器让second++

 

 mat【】

这里的[ ]是你给的这个key(str)他返回这个key对应的val,并且是这个val(次数)的引用

ke_type是key的类型,mapped_type是val的类型

水果第一次出现(countMap【str】)先插入 ,0次返回(水果所在的)迭代器,迭代器.second是0,0++,变成1次,再插入就插入失败只返回第已存水果的迭代器,val一直++,

第一个erase相当于插入(size++)没有val(val用的是默认构造,int是0char是/0,指针是空指针)

 第二个erase查找erase已经存在,返回已存在的erase,key的迭代器

第三个再查找

第四个test插入+修改 相当于(*it)->first=“测试”

第五个test插入+修改 相当于(*it)->first=“左边,剩余”

multimap

不能像上面一样统计次数了因为它允许重复内容插入

不支持【】,跟map比只是键值冗余(有重复的值)

不支持【】因为有多个重复的元素(key),有【】对个key到底返回谁?

map不关注val的问题如果key相同就认为已经有了不会看val

  sort可以对pair排序

排序依据key小就小,可以不小的话看val小就小

交集差集思路

 set可以有序加去重

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

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

相关文章

书生·浦语大模型-第四节课笔记/作业

笔记 作业 xtuner train ./config/internlm2_chat_7b_qlora_alpaca_e3_copy.py --work-dir ./train微调前效果 微调后效果 微调过程-transformer-lora

Django中的定时任务与后台任务队列的实践

&#x1f47d;发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 在Web开发中&#xff0c;处理定时任务和后台任务队列是很常见的需求。Django作为一个功能强…

032——从GUI->Client->Server->driver实现ds18b20数据的采集

目录 1、客户端修改和通信帧确定 2、 修改服务器程序 3、 添加driver_handle程序 4、 测试 1、客户端修改和通信帧确定 上次写dht11的时候顺手把ds18b20的GUI一起改了所以这次直接去改client #ds18b20elif cmd[2] 0 and cmd[3] 6:if cmd[4] g:try:global_var.TEMcmd[5]…

在 Linux 上通过 udev 规则绑定 ttyUSB 设备的相对地址

文章目录 问题描述解决方案1. 分辨当前 USB 设备的绝对地址2. 使用绝对地址查看设备属性3. 使用 udev 规则绑定设备到相对地址3.1. 区分多个不同型号 USB 设备3.2. 区分多个相同型号 USB 设备 问题描述 Linux 系统开机时会随机为连接的 USB 设备随机分配 /dev/ttyUSB* 这样的绝…

ubuntu20 解决网线不能联网 RTL8111/8168/8411

这种问题一般是驱动没有正确安装。 ----RTL8111/8168/8411是一块比较坑的网卡。 1、 查看网卡信息 lspci |grep Ethernet2、 对于高版本的Ubuntu&#xff0c;能直接使用命令安装驱动。下面的r8168-dkms需根据网卡信息修改&#xff0c;上面的网卡信息还有8111&#xff0c;但逐个…

CSS画一条虚线,并且灵活设置虚线的宽度和虚线之间的间隔和虚线的颜色

CSS画一条虚线,并且灵活设置虚线的宽度和虚线之间的间隔和虚线的颜色。 先看效果图&#xff1a; 在CSS中&#xff0c;你可以使用border属性或者background属性来画一条虚线。以下是两种常见的方法&#xff1a; 方法一&#xff1a;使用border属性 你可以设置一个元素的border…

C#版Facefusion:让你的脸与世界融为一体!-05 人脸增强

C#版Facefusion&#xff1a;让你的脸与世界融为一体&#xff01;-05 人脸增强 目录 说明 效果 模型信息 项目 代码 下载 说明 C#版Facefusion一共有如下5个步骤&#xff1a; 1、使用yoloface_8n.onnx进行人脸检测 2、使用2dfan4.onnx获取人脸关键点 3、使用arcface_w60…

C++高级特性:虚函数与多态的实现原理(十三)

1、虚函数表和虚函数表指针 如果一个类存在virtual关键字函数或者继承的基类中存在virtual关键字的函数&#xff0c;那么该类的就会存在vptr和一个vtable vptr虚函数表指针全称virtual table pointer、vtable是虚函数表virtual table的缩写。 class A{ public:~A(); };class B…

随机森林(Random Forests)

通过5个条件判定一件事情是否会发生&#xff0c;5个条件对这件事情是否发生的影响力不同&#xff0c;计算每个条件对这件事情发生的影响力多大&#xff0c;写一个随机森林&#xff08;Random Forests&#xff09;模型程序,最后打印5个条件分别的影响力。 ChatGPT 下面是一个使…

书生·浦语大模型实战营Day04OpenXLab 部署

书生浦语大模型实战营Day04OpenXLab 部署 如何在 OpenXLab 部署一个 InternLM2-7B chat 的应用。 OpenXLab浦源平台介绍 OpenXLab 浦源平台以开源为核心&#xff0c;旨在构建开源开放的人工智能生态&#xff0c;促进学术成果的开放共享。OpenXLab面向 AI 研究员和开发者提供…

微电子领域常见概念(五)界面结合能

微电子领域常见概念&#xff08;五&#xff09;界面结合能 界面结合能&#xff0c;也称为界面能或界面自由能&#xff0c;是描述两种不同材料接触时在它们的交界面上存在的特殊能量状态的物理量。在材料科学中&#xff0c;界面结合能是一个重要的概念&#xff0c;因为它直接影响…

【机器学习】特征筛选:提升模型性能的关键步骤

一、引言 在机器学习领域&#xff0c;特征筛选是一个至关重要的预处理步骤。随着数据集的日益庞大和复杂&#xff0c;特征的数量往往也随之激增。然而&#xff0c;并非所有的特征都对模型的性能提升有所贡献&#xff0c;有些特征甚至可能是冗余的、噪声较大的或者与目标变量无关…

STM32定时器编码器模式

定时器编码器模式&#xff1a; Timer -mode Cubemx配置项&#xff1a; 定时器编码模式选择&#xff1a; Encode: mode: TI1: 通道1上升沿使计数器1 TI2: 通道2上升沿使计数器1 TI1 and TI2: 1 和 2 都会1 EX: 获取 编码器正反转数值 数值demo&#xff1a; int Read_Spee…

claude3国内注册

claude3国内注册 Claude 3 作为大型语言模型的强大之处在于其先进的算法设计和大规模训练数据的应用&#xff0c;能够执行复杂和多样化的任务。以下是 Claude 3 主要的强项&#xff1a; 接近人类的理解能力&#xff1a;Claude 3 能够更加深入地理解文本的含义&#xff0c;包括…

7.Prism框架之对话框服务

文章目录 一. 目标二. 技能介绍① 什么是Dialog?② Prism中Dialog的实现方式③ Dialog使用案例一 (修改器)④ Dialog使用案例2(异常显示窗口) 一. 目标 1. 什么是Dialog?2. 传统的Dialog如何实现?3. Prism中Dialog实现方式4. 使用Dialog实现一个异常信息弹出框 二. 技能介…

python编写一个简单的课时记录系统

&#x1f47d;发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 使用Python创建一个简单的课时记录系统 在学习过程中&#xff0c;跟踪课时的进度是非常重要…

LeetCode in Python 69. Sqrt(x) (x的平方根)

求x的平方根&#xff0c;第一想法可能是遍历0&#xff5e;x&#xff0c;求其平方&#xff0c;找到或且但其时间复杂度为O(n)&#xff0c;或是想到遍历0&#xff5e;M即可&#xff0c;其中M x // 2&#xff0c;将时间复杂度降至O()。本文利用二分思想&#xff0c;给出一种时间复…

python--pyQt5 进度条:QProgressBar

https://www.cnblogs.com/itwangqiang/articles/14959401.html https://blog.csdn.net/weixin_43990846/article/details/123880081 进度条用于向用户指示操作的进度&#xff0c;并向他们保证应用程序仍在运行 例 1 import sys from PyQt5.QtWidgets import QApplication, QWi…

(十六)C++自制植物大战僵尸游戏的宏定义讲解

植物大战僵尸游戏开发教程专栏地址http://t.csdnimg.cn/uzrnw 宏定义 在游戏代码中为了方便,定义了许多宏定义。使用宏定义简化代码并提高可读性。下面将讲解游戏中用到的宏定义。 代码位置 代码所在位置是Class\Scenes\GameScene文件夹中。具体如下图所示。 Define.h …

尝试给笔记本超频

超频&#xff08;英语&#xff1a;overclocking&#xff09;是把一个电子配件的时脉速度提升至高于厂方所定的速度运作&#xff0c;从而提升性能的方法&#xff0c;但此举有可能导致该配件稳定性以及配件寿命下降。 笔记本配置为&#xff1a; 处理器 AMD Ryzen 7 7730U wit…