C++ map/set 函数用法解析

news2025/1/10 20:35:39

一 . set

1.1 set 是什么、关联/非关联式容器

        se是一种关联式容器,主要用进行查找的工作。采用了key模型,判断数据在不在。不支持修改的操作。

序列式容器(线性表):vector / list /deque(单纯存储数据)
关联式容器:map 、 set 、哈希.....(存储数据和数据和数据之间的关系方便查找)

1.2 set的函数

(1)insert

1. 直接输入一个值

 插入与节点相同的值时 insert会返回一个 <键值对> <相同key值位置的迭代器,false>(所有数据只能出现一次)。返回值pari<iterator,bool>,pair中定义了两个对象一个是first,一个是second,pair被称为一个键值对

2. 在某个迭代器的位置插入某个具体的值

3.使用一个迭代器区间进行插入(传输迭代器区间一定是左闭右开的)

(2)erase

1. 删除某个迭代器的位置

2.删除某个具体的值(删除成功返回1,未能成功返回0, 返回的是删除节点的个数)

3.删除一个迭代器区间(传输迭代器区间一定是左闭右开的)

(3)find

find函数如果找到了想要查找元素的位置就返回其迭代器,否则返回end的位置。

(4)lower_bound

lower_bound函数的主要作用是在std::set(或其他有序容器如std::multiset、std::map、std::multimap等)中查找不小于(大于等于)给定值的第一个元素。该函数返回一个迭代器,指向找到的元素;如果没有找到这样的元素,则返回指向容器中最后一个元素之后位置的迭代器(即end()迭代器)。

(5)upper_bound

upper_bound函数用于查找大于给定值的第一个元素。该函数返回一个迭代器,指向找到的元素(如果找到的话,实际上由于查找的是大于给定值的元素,所以返回的迭代器指向的元素是第一个大于给定值的元素,或者如果没有这样的元素,则指向容器末尾之后的位置,即end()迭代器)。

可以用lower_bound 和 upper_bound 来进行定位一个的迭代器区间。

(6)equal_range

用于查找等于给定值的所有元素的范围。它返回一个pair,其中pair.first是一个迭代器,指向第一个大于等于给定值的元素(如果不存在这样的元素,则与end()相同);pair.second是一个迭代器,指向第一个大于给定值的元素(或者,如果没有这样的元素,则也等于end())。

(7)count

cout 函数用于返回一个值在树中出现的次数,对于set来说 只有出现一次和没有出现的情况,可以用来判断某元素在树中是否存在,在的话函数返回1否则返回0。

二.multiset

2.1 multiset 的结构和set的区别

        multiset 的容器的作用是允许相同的元素插入到树中,其功能是判断一个元素是否在树中,与set的区别就是multiset允许元素值(key)相同。

(1)find


其中find函数会返回中序遍历到的第一个 需要查询的节点。

(2)erase

 erase函数,接收到一个需要删除的值(val)会把树中所有的val都删掉,会有一个size_t类型的返回值 (返回的是删除节点的个数)。
equal_range 函数在multiset中还是比较有用的,可以删除多个相同节点的值,first返回大于等于val 的迭代器的值,second返回大于val迭代器的值,这样的性质正好可以和erase配合使用,删除多个相同的值。

三.map

3.1 map 的结构

采用了k/v型的数据结构,底层是一颗红黑树,其中各个元素的值只能出现一次。

map的迭代器是一个双向迭代器,它不支持sort排序哦。

3.2 单向迭代器、双向迭代器、随机访问迭代器

单向迭代器:支持++

双向迭代器:支持 ++ -- 

随机访问迭代器:支持 ++ -- + - (你懂我意思吧)
3.3 函数

(1)insert

insert插入时需要插入一个value_type,这是value_type是一个pair的键值对,pair的first是一个key值,second是val值,第一个key是关键字,第二个val是关键字附带的一个val值,key和val的类型可以根据场景来定义。

编译器在一般情况下,觉得每次要插入时都要显示实例化一个pair类型的对象太费劲了,所以我们一般使用make_pair函数来构造出来一个pair键值对。以下是make_pair函数的实现。

make_pair函数是C++标准库中的一个辅助函数用于创建并返回一个pair对象。pair是一个模板类,它封装了两个值,这两个值可以是不同类型的。make_pair函数简化了pair对象的创建过程,不需要再显示实例化一个pair类型的键值对了,这样使得代码更加简洁。

template<class T1,class T2>
make_pair(T1 key,T2 val)
{
    return (pair<T1,T2>(x,y));
}

 在insert函数中如果key值在树中已经出现了则不添加节点并且返回一个键值对(first: key已经存在的位置的迭代器,second:false),如果key值在树中没有出现的话那就正常插入并且返回一个键值对(first:刚插入节点的迭代器,second:true)

(2)[ ]

[ ] 在map中是一个非常重要的运算符重载,在[ ] 中写一个key值 ,会得到一个key对应的val值的引用。如果在[ ] 中写了一个不存在的key值,那么编译器会在map中自动添加这个key值和val值。

[ ] 底层是用insert 函数来实现的,因为在使用insert函数时,如果key值在树中已经出现了则不添加节点并且返回一个键值对(first: key已经存在的位置的迭代器,second:false),如果key值在树中没有出现的话那就正常插入并且返回一个键值对(first:刚插入节点的迭代器,second:true)

[ ] 就相当于调用这个函数

这个函数就相当于

 

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

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

相关文章

top命令从入门到精通

top命令从入门到精通 linux平台上一个可以用于性能监控、排查的神器。 响应参数 up&#xff1a;运行时长users&#xff1a;当前登陆了几个用户load average&#xff1a;运行负载 sleeping&#xff1a;休眠进程stopped&#xff1a;终止进程zombie&#xff1a;僵尸进程 us&…

Neutralinojs教程项目实战初体验(踩坑指南),干翻 electron

Neutralinojs 项目实战初体验&#xff08;踩坑指南&#xff09;&#xff0c;干翻 electron Neutralinojs 官方文档 卧槽卧槽&#xff0c;&#xff01;这个年轻人居然用浏览器把电脑关机了_哔哩哔哩_bilibili正是在下 本教程搭建的是纯原生项目&#xff0c;没有和其它前端框架…

【C++BFS】959. 由斜杠划分区域

本文涉及知识点 CBFS算法 LeetCode959. 由斜杠划分区域 在由 1 x 1 方格组成的 n x n 网格 grid 中&#xff0c;每个 1 x 1 方块由 ‘/’、‘’ 或空格构成。这些字符会将方块划分为一些共边的区域。 给定网格 grid 表示为一个字符串数组&#xff0c;返回 区域的数量 。 请注…

整理压缩JavaScript文件

你是不是会担心有专业人员通过你写的JavaScript语法来判断你的接口数据&#xff0c;今天就介绍一种可以封装你写的JavaScript的工具 环境&#xff1a;Windows10、node20.11.1、Vue/cli 5.0.8 uglify-js 是一个流行的 JavaScript 压缩工具&#xff0c;用于减少 JavaScript 文件…

angular入门基础教程(二)第一个angular组件

ng中的语法跟vue中是一样的插值语法&#xff0c;其实也是早期vue抄的ng的思路&#xff0c;使用{{variable}}形式&#xff0c;vue借鉴了ng和react&#xff0c;这个我们就不多了。 新建一个子组件 在项目根目录下面&#xff0c;执行 ng g component ./components/UserList这样…

Transformer——逐步详解架构和完整代码搭建

好久没更新博客&#xff0c;后面更新会勤一些。今天想聊一下Transformer&#xff0c;Transformer在NLP和CV领域都有着重要的价值&#xff0c;甚至可以看作是一个基础模型&#xff0c;这篇博客将通过详细代码深入解析Transformer模型总体架构图各个部分的的作用和搭建:论文链接&…

angular入门基础教程(九)依赖注入(DI)

依赖注入 Angular 中的依赖注入&#xff08;DI&#xff09;是框架最强大的特性之一。可以将依赖注入视为 Angular 在运行时为你的应用 提供所需资源的能力。依赖项可以是服务或其他资源。 使用服务的一种方式是作为与数据和 API 交互的方式。为了使服务可重用&#xff0c;应该…

晋升有望,5本易录用的计算机三四区潜力刊,通过率>50%,2个月超速接收,好发

今天模术狮给大家整理了5本让你晋升有望&#xff01;易录用的计算机三区四区潜力刊&#xff0c;通过率&#xff1e;50%&#xff0c;2个月超速接收&#xff0c;好发&#xff01; 1 DATA MINING AND KNOWLEDGE DISCOVERY 期刊简介&#xff1a;数据收集、存储和分发方面的进步产生…

Qt系统机制

Qt系统 Qt文件概述输入输出设备类QFileQFileInfoQt多线程Qt多线程常用API使用Qt多线程 线程安全互斥锁读写锁条件变量信号量 Qt网络QUdpSocketQNetworkDatagram设计一个UDP回显服务器QTcpServerQTcpSocketTcp版本的回显服务器HttpClient核心API Qt 音频Qt视频 Qt文件概述 ⽂件操…

阿里云服务器系统盘扩容后,宝塔面板不显示新容量的问题

1. 安装 growpart 扩展 yum install -y cloud-utils-growpart 2. 运行fdisk -l命令查看磁盘实际大小。 fdisk -l 用于:查看磁盘实际大小 说明:磁盘(/dev/vda)实际大小为:250 G。 3. 运行df -h命令查看磁盘分配大小。 df -h 用于:查看磁盘分配大小 4. 自适应分区扩容 g…

2024 Navicat Premium最新版简体中文版破解激活永久图文详细教程(亲测可用)

1.官网下载&#xff1a;下载地址 2.百度网盘下载&#xff1a;下载地址 3.未安装过的用户可直接跳过该步骤&#xff0c;如果已安装Navicat&#xff0c;记得先卸载干净&#xff0c;防止破解失效&#xff0c;卸载完成后执行补丁压缩包中的Navicat.bat脚本&#xff08;一闪而过表示…

热门景区精准客流统计也能如此简单做到了

在热门景区&#xff0c;游客如织&#xff0c;如何实现精准的客流统计成为了景区管理者关注的重点。令人欣喜的是&#xff0c;如今这一难题已经有了简单而有效的解决方案。 一、景区应用客流统计的原因 首先&#xff0c;热门景区承载着巨大的游客流量&#xff0c;为了确保游客的…

如何使用git拉取gitee上面的项目/代码?(超简单)

一、下载git软件 下载地址&#xff1a;git官网地址 1.点击右边小电脑上的按钮下载 2.选择自己电脑对应的系统 3.基本都是默认&#xff0c;这里需要勾一下就ok 4.正在安装 2.使用git软件 1.如何打开git 找到你想要操作的文件夹&#xff0c;右击open git bash here就可以…

云计算实训16——关于web,http协议,https协议,apache,nginx的学习与认知

一、web基本概念和常识 1.Web Web 服务是动态的、可交互的、跨平台的和图形化的为⽤户提供的⼀种在互联⽹上浏览信息的服务。 2.web服务器&#xff08;web server&#xff09; 也称HTTP服务器&#xff08;HTTP server&#xff09;&#xff0c;主要有 Nginx、Apache、Tomcat 等。…

【参会邀请】第四届区块链技术与信息安全国际会议(ICBCTIS 2024)诚邀相聚江城!

我们诚挚地邀请您参与第四届区块链技术与信息安全国际会议&#xff08;ICBCTIS 2024&#xff09;。本届会议将于2024年8月17日~19日在中国武汉召开。会议将围绕区块链技术与信息安全等相关研究领域&#xff0c;特邀国内外数位在此领域学术卓越的学者专家做相关致辞与报告&#…

一行Python代码实现神奇效果:创意编程实例

文末赠免费精品编程资料~~ 1. 基础中的魔法&#xff1a;打印艺术 目标&#xff1a;用一行代码打印出一个简单的图案&#xff0c;比如心形。 print( .join([**i for i in range(1, 6)] [ *4] [**i for i in range(5, 0, -1)]))解析&#xff1a; 我们利用列表推导式生成两部…

Halcon深度学习分类模型

1.Halcon20之后深度学习支持CPU训练模型&#xff0c;没有money买显卡的小伙伴有福了。但是缺点也很明显&#xff0c;就是训练速度超级慢&#xff0c;推理效果也没有GPU好&#xff0c;不过学习用足够。 2.分类模型是Halcon深度学习最简单的模型&#xff0c;可以用在物品分类&…

说真的,内裤袜子丢进洗衣机比手洗好!内裤袜子洗衣机推荐

内裤和袜子作为日常生活中不可或缺的贴身衣物&#xff0c;其清洁卫生尤为重要&#xff0c;但频繁的洗涤工作往往令人感到繁琐。正是因为这一清洗需求&#xff0c;内裤袜子洗衣机应运而生&#xff0c;它不仅为我们的生活带来了便利&#xff0c;更体现了对个人卫生和生活品质的重…

货拉拉论文入选亚太消费者研究会议及亚太营销国际学术会议

近日,亚太消费者研究会议(AP-ACR)召开。本次会议上,货拉拉和香港中文大学合作就论文《Why Showing Multiple Options Simultaneously Makes Customers Less Picky》(《为什么同步显示多个选项会使消费者变得更不挑剔》)进行主题报告。此前,本篇论文也曾在第二届亚太营销国际学术…