当前位置: 首页 > news >正文

【C++】set和map

setmap就是我们上篇博客说的key模型keyvalue模型。它们属于是关联式容器,我们之前说过普通容器和容器适配器,这里的关联式容器就是元素之间是有关联的,通过上篇博客的讲解我们也对它们直接的关系有了一定的了解,那么下面我们先看一下set的简单使用,set其实翻译过来是集合的意思

可以看到,set中的每个值都是唯一的,不能有重复值,它的底层就是一个二叉搜索树,下面是它的构造函数

它有默认构造,可以用一段迭代器区间构造,还有拷贝构造,它也是有迭代器的,它的遍历顺序就是中序遍历,为了使遍历是有序的

下面一个比较关键的就是它的insert,它的insert具有排序加去重的功能,就是说插入后就有序并且存在的值不会被插入。

并且这里面的key值是不允许修改的,因为一旦修改,他就不满足相应的性质了。下面一个是我们的find

可以看到如果成功找到就返回迭代器,如果找不到就返回end()的迭代器,所以我们就可以这么写

下面的删除函数也是比较简单的

下面有两个比较有用的函数,就是

分别是下限和上限

这个是返回大于等于val值的最靠近begin的迭代器

这个是返回大于val值的最靠近begin的迭代器,那么为什么叫上限和下限呢?这都是有实际意义的,它们两个组合到一起恰好可以组成一段左开右闭的区间,比如像下面这样

我给定一个区间,它就可以很好的打印,并且我这里it2指向的值还是8

这就是左开右闭的意义

有了我们上面的set,还有一个multiset,它们的区别就是multiset可以存相同的值

我们这里的find就返回查找到的中序遍历的第一个值,还有一个count函数就返回相同值的个数

说完了set,我们说一下map,翻译过来是映射的意思,显而易见就是key和value之间的映射,同样用来比较的key不能修改,value是可以修改的

我们可以看到,我们不是要一次插入key和value嘛,于是我们把他们放到一个对象里边,这个对象的类是用类模板来生成的,那我们先了解一下这个类模板pair

这是一个类模板,有两个公有的成员first和second,意味着我们可以直接访问。还有一个重要的函数

我们可以用来创建对象,那我们就用map的insert来用一下pair,我们pair是没有重载<<的,所以我们自己去实现打印,就是先打印first,后打印second,就像下面这样

我们的map中也是,key值不能相同,假如我插入一个与map中key值相同的,那么它既不会插入也不会更新。下面一个非常重要的就是重载方括号

我们大概可以看出什么呢?就是方括号中是一个key值,并且这个函数返回key值对应的value值的拷贝。然后它又说这个函数相当于下面那个式子,于是我们就需要看看insert函数有什么东西

我们看第一个函数声明,它这里的value_type也给了解释,不是我们之前说的kv中的v,而是一个pair类的对象

它这里的返回值也是不同的,虽然也是一个pair类的对象,但是里边是一个位置,一个bool值,表示是否插入了

于是我们再返回方括号重载那里,

把这个分一下我们就可以看出方括号重载的本质实际上是调用insert,调用完insert后取insert的返回值的first(这是一个迭代器,记录插入元素的位置),再通过这个位置找到key对应的value再返回value的引用。由此可以看出重载方括号其实有insert的作用,所以重载方括号有以下的作用

int main() {map<string, string>dict;//先插入一些元素pair<string, string> p1("banana", "香蕉");dict.insert(p1);dict.insert(pair<string, string>("orange", "橘子"));dict.insert({ "apple","苹果" });dict.insert(make_pair("watermelon", "西瓜"));//operator[]的作用dict["pear"];//插入,不给value值,就用value值的默认构造生成一个值cout << dict["banana"] << endl;//查找value值dict["orange"] = "桔子";//修改value值dict["peach"] = "桃子";//插入+修改value值for (auto& e : dict) {cout << e.first << ":" << e.second << endl;}return 0;
}

于是,我们之前说的统计水果还可以用insert的返回值的特性实现

int main() {string str[] = { "草莓","香蕉","苹果","橘子","草莓","香蕉","香蕉","苹果","橘子","草莓","香蕉", };map<string, int>m;for (auto& e : str) {pair<map<string, int>::iterator, bool> ret;ret = m.insert({e,1});if (ret.second == false) {ret.first->second++;}}for (auto& e : m) {cout << e.first << ":" << e.second << endl;}return 0;
}

同理,我们还有一个multimap,就是其中key值可以有相同的,并且这个类是没有重载方括号的,因为key值相同的两组元素value值不同,这是没有办法实现的

相关文章:

【C++】set和map

set和map就是我们上篇博客说的key模型和keyvalue模型。它们属于是关联式容器&#xff0c;我们之前说过普通容器和容器适配器&#xff0c;这里的关联式容器就是元素之间是有关联的&#xff0c;通过上篇博客的讲解我们也对它们直接的关系有了一定的了解&#xff0c;那么下面我们先…...

yolov5 v7.0打包exe文件,使用C++调用

cd到yolo5文件夹下 pyinstaller -p 当前路径 -i logo图标 detect.py问题汇总 运行detect.exe找不到default.yaml 这个是yolov8里的文件 1 复制权重文件到exe所在目录。 2 根据报错提示的配置文件路径&#xff0c;把default.yaml复制放到相应的路径下。&#xff08;缺少相应…...

保研线性代数机器学习基础复习2

1.什么是群&#xff08;Group&#xff09;&#xff1f; 对于一个集合 G 以及集合上的操作 &#xff0c;如果G G-> G&#xff0c;那么称&#xff08;G&#xff0c;&#xff09;为一个群&#xff0c;并且满足如下性质&#xff1a; 封闭性&#xff1a;结合性&#xff1a;中性…...

vultr ubuntu 服务器远程桌面安装及连接

一. 概述 vultr 上开启一个linux服务器&#xff0c;都是以终端形式给出的&#xff0c;默认不带 ui 桌面的&#xff0c;那其实对于想使用服务器上浏览器时的情形不是很好。那有没有方法在远程服务器安装桌面&#xff0c;然后原程使用呢&#xff1f;至少ubuntu的服务器是有的&am…...

前端学习<二>CSS基础——12-CSS3属性详解:动画详解

前言 本文主要内容&#xff1a; 过渡&#xff1a;transition 2D 转换 transform 3D 转换 transform 动画&#xff1a;animation 过渡&#xff1a;transition transition的中文含义是过渡。过渡是CSS3中具有颠覆性的一个特征&#xff0c;可以实现元素不同状态间的平滑过渡…...

Sqoop 的安装与配置

目录 1 下载并解压2 修改配置文件3 添加环境变量4 拷贝 JDBC 驱动5 测试Sqoop是否能够成功连接数据库 下载地址 1 下载并解压 &#xff08;1&#xff09;上传安装包 sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz 到 hadoop101 的 /opt/software 路径中 &#xff08;2&#xf…...

Mysql设置访问权限(docker配置)

1.运行命令&#xff1a;docker exec -it 数据库名 bash&#xff0c;我这里是bot_test, docker exec -it bot_test bash 2.运行命令mysql -uroot -p --default-character-setutf8&#xff0c;输入密码连接数据库 3.运行命令show databases&#xff0c;查看当前的表 4.进入my…...

【Linux】详解软硬链接

一、软硬链接的建立方法 1.1软链接的建立 假设在当前目录下有一个test.txt文件&#xff0c;要对其建立软链接&#xff0c;做法如下&#xff1a; ln就是link的意思&#xff0c;-s表示软链接&#xff0c;test.txt要建立软链接的文件名&#xff0c;后面跟上要建立的软链接文件名…...

维修贝加莱4PP420.1043-B5触摸屏Power Panel 400工业电脑液晶

深圳捷达工控维修为贝加莱、HMI 显示电源面板 400 4PP420.1043-B5 提供专业电子维修。在 深圳捷达工控维修&#xff0c;我们拥有及时且经济高效地维修 B&R 、HMI Display Power Panel 400 4PP420.1043-B5 的经验。我们为发送给我们工厂维修的贝加莱 HMI 显示面板 400 4PP42…...

Java_21 完成一半题目

完成一半题目 有 N 位扣友参加了微软与力扣举办了「以扣会友」线下活动。主办方提供了 2*N 道题目&#xff0c;整型数组 questions 中每个数字对应了每道题目所涉及的知识点类型。 若每位扣友选择不同的一题&#xff0c;请返回被选的 N 道题目至少包含多少种知识点类型。 示例…...

【WPF应用21】WPF 中的 TextBox 控件详解与示例

在 Windows Presentation Foundation (WPF) 中&#xff0c;TextBox 控件是一个强大的输入控件&#xff0c;允许用户输入、编辑和选择文本。TextBox 控件在各种应用程序中都非常常见&#xff0c;例如表单、对话框和编辑器。本文将详细介绍 TextBox 控件的功能、使用方法、属性、…...

小程序页面传参?

小程序页面之间传递参数通常可以通过以下几种方式实现&#xff1a; 通过 URL 参数传递&#xff1a;可以在跳转目标页面时&#xff0c;在 URL 中添加参数&#xff0c;目标页面可以通过 options 参数获取传递过来的数据。 // 页面 A wx.navigateTo({url: targetPage?param1value…...

C++list的模拟实现

为了实现list&#xff0c;我们需要实现三个类 一、List的节点类 template<class T> struct ListNode {ListNode(const T& val T()):_pPre(nullptr),_pNext(nullptr),_val(val){}ListNode<T>* _pPre;ListNode<T>* _pNext;T _val; }; 二、List的迭代器…...

Leetcode 187. 重复的DNA序列

DNA序列 由一系列核苷酸组成&#xff0c;缩写为 ‘A’, ‘C’, ‘G’ 和 ‘T’.。 例如&#xff0c;“ACGAATTCCG” 是一个 DNA序列 。 在研究 DNA 时&#xff0c;识别 DNA 中的重复序列非常有用。 给定一个表示 DNA序列 的字符串 s &#xff0c;返回所有在 DNA 分子中出现不…...

都江堰泛计算操作系统(多机)应用方向

1、异构多核芯片 DJYOS是全球唯一支持异构多核的操作系统。当前的系统级芯片&#xff0c;为了适应多样化的用户需求&#xff0c;基本上都采用了异构多核架构。传统操作系统就需要在一个芯片内&#xff0c;运行多种操作系统&#xff0c;开发工作更加复杂&#xff0c;运行协同性低…...

【第十二届“泰迪杯”数据挖掘挑战赛】【2024泰迪杯】B题基于多模态特征融合的图像文本检索—解题全流程(论文更新)

【第十二届“泰迪杯”数据挖掘挑战赛】【2024泰迪杯】B题基于多模态特征融合的图像文本检索更新&#xff08;论文更新&#xff09; ​ 本节主要更新了论文、训练日志的log数据提取&#xff08;Loss、ACC、RK&#xff09;等数据可视化作图的代码 B题交流QQ群&#xff1a; 4583…...

蓝桥杯22年第十三届省赛-统计子矩阵|一维前缀和加双指针

题目链接&#xff1a; 1.统计子矩阵 - 蓝桥云课 (lanqiao.cn) 蓝桥杯2022年第十三届省赛真题-统计子矩阵 - C语言网 (dotcpp.com) 说明&#xff1a; 涉及到子矩阵的时候&#xff0c;一般就跟前缀和相关&#xff0c;可以降维。 先回顾一下最大子矩阵&#xff0c;回忆一下一…...

SaaS 电商设计 (十) 记一次 5000kw 商品数据ES迁移 (详细的集群搭建以及线上灰度过程设计)

目录 一.背景二.技术目标三.技术方案3.1 整体流程3.2 ES 切换前:完成整体新集群的搭建.i:拓扑结构设计ii: 如何选择整体的 **ES** 集群配置. 3.3 **ES** 版本切换中3.3.1 多client版本兼容3.3.2 Router的设计 3.4 ES 切换后3.5 开箱即用 四.总结 专栏系列 -SaaS 电商设计 (一) …...

linux安装Tomcat

linux安装Tomcat 下载地址&#xff1a;https://archive.apache.org/dist/tomcat/tomcat-8/v8.5.87/bin/apache-tomcat-8.5.87.tar.gz 将下载的安装包传到该文件夹 解压安装包 tar -zxvf apache-tomcat-8.5.87.tar.gz 配置环境变量 vim /etc/profile 添加指定文件最下方 expo…...

【机器学习300问】57、机器是如何读得懂文本数据的呢?

你知道的&#xff0c;人工智能的大佬们想方设法的让机器具备人一样的能力&#xff0c;比如读懂文本的能力。既然机器是在模仿人类&#xff0c;那么问题“机器是如何读得懂文本数据的呢&#xff1f;”就可以变成“人是如何读得懂文本数据的呢&#xff1f;” 一、人是如何读得懂…...

了解XSS和CSRF攻击与防御

什么是XSS攻击 XSS&#xff08;Cross-Site Scripting&#xff0c;跨站脚本攻击&#xff09;是一种常见的网络安全漏洞&#xff0c;它允许攻击者在受害者的浏览器上执行恶意脚本。这种攻击通常发生在 web 应用程序中&#xff0c;攻击者通过注入恶意脚本来利用用户对网站的信任&…...

NEO 学习之 MLE(最大似然估计)

文章目录 简单题目MLE 在不同的分布的运用正态分布指数分布均匀分布泊松分布 如何理解 最大似然估计&#xff1f; 就是我们先取出一堆样本&#xff0c;得到一个L( θ \theta θ) 函数&#xff0c;然后的话&#xff0c;这个是关于 θ \theta θ 的一个函数&#xff0c;那么由于存…...

going和Java对比有什么不同

语法风格&#xff1a;Golang 和 Java 的语法风格有很大的不同。Golang 更加简单&#xff0c;语法类似于 C 语言&#xff0c;而 Java 比较复杂&#xff0c;语法类似于 C。 并发&#xff1a;Golang 在并发方面有很大的优势&#xff0c;支持轻量级线程 goroutine 和 channel 通信…...

RabbitMQ面经 手打浓缩版

保证可靠性 生产者 本地事务完成和消息发送同时完成 通过事务消息完成 重写confirm在里面做逻辑处理 确保发送成功&#xff08;不成功就放入到重试队列&#xff09; MQ 打开持久化确保消息不会丢失 消费者 改成手动回应 不重复消费 生产者 保证不重复发送消息 消费者…...

JavaScript引用数据类型

JS总共分为两种数据类型&#xff1a; 1.基本数据类型 2.引用数据类型 基本数据类型在之前的文章中待大家了解过了 今天我们就来了解一下引用数据类型&#xff1a; 首先呢&#xff0c;我们要知道引用数据类型是存储在哪里的&#xff1a;引用数据类型是存放在堆内存中的对象…...

Mac m1 Flink的HelloWorld

首先在官方下载Downloads | Apache Flink 下载好压缩包后解压&#xff0c;得到Flink文件夹 进入&#xff1a;cd flink-1.19.0 ls 查看里面的文件&#xff1a; 执行启动集群 ./bin/start-cluster.sh 输出显示它已经成功地启动了集群&#xff0c;并且正在启动 standalonesessio…...

3.1 Python变量的定义和使用

Python变量的定义和使用 任何编程语言都需要处理数据&#xff0c;比如数字、字符串、字符等&#xff0c;我们可以直接使用数据&#xff0c;也可以将数据保存到变量中&#xff0c;方便以后使用。 变量&#xff08;Variable&#xff09;可以看成一个小箱子&#xff0c;专门用来…...

OceanBase中左外连接和反连接的经验分享

本文作者&#xff1a;张瑞远&#xff0c;曾从事银行、证券数仓设计、开发、优化类工作&#xff0c;现主要从事电信级IT系统及数据库的规划设计、架构设计、运维实施、运维服务、故障处理、性能优化等工作。 持有Orale OCM,MySQL OCP及国产代表数据库认证。 获得的专业技能与认证…...

如何提升公众号搜索量?分享内部运营的5步优化技术!

最近一直有自媒体同行朋友在写关于公众号的内容&#xff0c;很多都说公众号现在没得玩了。其实&#xff0c;在运营自媒体上面&#xff0c;思维不通&#xff0c;技术不到位&#xff0c;哪个平台都不适合你玩。 想要在自媒体上面运营变现&#xff0c;一定不要先点击广告变现&…...

【2024】根据系统平均负载情况排查隐患

查看系统负载情况的时候可以使用top和uptime命令。 其中top是一个比较综合的命令,如果我们只需要查看负载情况,可以直接使用uptime命令即可。 uptime命令是一个查看系统运行时间和负载情况的命令,分为四个部分: 系统当前时间系统运行时间当前登录用户数系统平均负载:分别…...

专业APP客户端做网站/国产搜什么关键词最好看

转自&#xff1a;https://juejin.cn/post/68982703130505379971.索引类型 keyof 索引类型查询操作符&#xff0c;可以获取泛型T上所有的 public 属性名构成联合类型class Person { name: string "胡先生" age: number 18 private UserId: number 123}typ…...

宁波网站制作首推蓉胜网络好/百度指数api

文章目录前言1.功能开关的概念2.功能开关的优点一、ASP.NET Core中间件实现1.相关依赖2.中间件代码3.在管道中的使用4.修改配置控制二、IFeatureFilter过滤器1.过滤去代码2.配置文件3.改写功能开关中间件前言 1.功能开关的概念 功能开关&#xff0c;相当于可以控制访问的流转…...

黑龙江省建设教育信息网网站/google浏览器官网

GRUB的功能1. 提供选择要启动的内核或者系统2. 提供交互式接口。进入GRUB后按e键进入GRUB的交互接口&#xff0c;可已经行Linux系统运行基本的选择。3. 基于密码的保护&#xff1a;启用内核映像&#xff0c;传递参数12341234GRUB的接口格式title&#xff1a;操作系统的内核或者…...

企业网站设计与管理系统/搜索引擎优化是做什么的

https://blog.csdn.net/weixin_42075590/article/details/80740968 前言 刚刚确认这个 Chat 主题的时候&#xff0c;周围就有同事和同学质疑&#xff0c;有的说 多进程没有前途&#xff0c;有的说多进程就是神经病。虽然这些说法过于武断&#xff0c;但是不可否认的&#xff…...

原创wordpress主题/太原最新情况

games101_光线追踪4上节内容Monte Carlo Integration(蒙特卡洛积分)采样举例Path Tracing(路径追踪)Whitted-Style光线追踪产生的错误问题一&#xff1a;The Utah Teapot问题二&#xff1a;The Cornell BoxWhitted-Style光线追踪是错误的蒙特卡洛方法对于一个采样点的解决方法问…...

哪个网站可以做魔方图片大全/必应搜索引擎网站

select * from 表名 where datalength(列名)0 or datalength(列名) is null转载于:https://www.cnblogs.com/flyrain/p/SQL_Ntext.html...