C++语法(18)---- set和map

news2024/11/16 2:19:47

C++语法(17)---- 二叉搜索树_哈里沃克的博客-CSDN博客icon-default.png?t=N3I4https://blog.csdn.net/m0_63488627/article/details/130174864 目录

1.set的介绍

1.set使用

1.基本结构

2.insert

3.erase

4.find

5.count

2.multiset

1.count

2.find

2.map的介绍

1.map

1.相关函数

2.operator[]的原理

​编辑

2.multimap


1.set的介绍

序列式容器:STL中的部分容器,比如:vector、list、deque、forward_list(C++11)等这些容器统称为序列式容器,因为其底层为线性序列的数据结构,里面存储的是元素本身。

关联式容器也是用来存储数据的,与序列式容器不同的是,其里面存储的是<key, value>结构的键值对,在数据检索时比序列式容器效率更高。其中的数据是相互关联的。

1.set使用

1.基本结构

其底层实现其实是平衡搜索二叉树

2.insert

第一个就是插入指定值

第二个是指定迭代器位置插入,不过该函数不要轻易使用,因为一旦插入的逻辑违背搜索二叉树的原则,那么变成了一个错误的结构

第三个是按迭代器位置拷贝

int main()
{
	set<int> s;
	s.insert(7);
	s.insert(4);
	s.insert(5);
	s.insert(3);
	s.insert(6);
	s.insert(1);
	s.insert(1);
	for (auto& e : s)
	{
		cout << e << " ";
	}
	cout << endl;
	return 0;
}

从结果上看,set的作用就是查重加排序。insert检查到已经与重复的数据就不插入了

3.erase

第一个是删除迭代器

第二个是删除传入的数据

4.find

 如果有,则返回指向的迭代器;如果没有返回的迭代器是end()

当然算法库的find()调用迭代器找数据的函数也可以实现同样的效果,但是两个的底层不同,算法库的find是一种暴力求解,全部遍历,O(N);但是set的find的函数是基于平衡搜索二叉树的结构,那么就接近于二分查找,O(logN)

5.count

 其实是确定set中对应数据的个数;但是在这里很冗余啊,因为set就是去重的,就算有也只有一个。不过不要担心,count的实现是服务与multiset的

2.multiset

multiset是一个可以接受同样一个数据插入的结构

插入删除等函数跟set基本一致

1.count

count专门服务于它,因为它能重复

2.find

find找到的数是中序遍历的第一个重复的数

2.map的介绍

1.map

1.相关函数

key: 键值对中key的类型
T:键值对中value的类型

int main()
{
	map<string, string> m;
	m.insert(pair<string, string>("排序", "sort"));
	m.insert(make_pair("整数", "int"));
	for (auto& e : m)
	{
		cout << e.first << " " << e.second << endl;
	}
	return 0;
}

2.operator[]的原理

1.普通计数

int main()
{
	string arr[] = { "苹果", "西瓜", "苹果", "西瓜", "苹果", "苹果", "西瓜",
	"苹果", "香蕉", "苹果", "香蕉" };
	map<string, int> m;
	for (auto& e : arr)
	{
		if (m.find(e) == m.end())
			m.insert(make_pair(e, 1));
		else
			m.find(e)->second++;
	}
	for (auto& e : m)
	{
		cout << e.first << " " << e.second << endl;
	}
}

2. []原理和使用计数

1.[]中,pair构造用<key, T()>构造一个键值对,然后调用insert()函数将该键值对插入到map中
2.如果key已经存在,插入失败,insert函数返回该key所在位置的迭代器
3.如果key不存在,插入成功,insert函数返回新插入元素所在位置的迭代器,那么此时该迭代器的T位置调用默认构造
4.operator[]函数最后将insert返回值键值对中的value返回,那么我们对value进行操作就能起到计数的功能了

int main()
{
	string arr[] = { "苹果", "西瓜", "苹果", "西瓜", "苹果", "苹果", "西瓜",
	"苹果", "香蕉", "苹果", "香蕉" };
	map<string, int> m;
	for (auto& e : arr)
	{
		m[e]++;
	}
	for (auto& e : m)
	{
		cout << e.first << " " << e.second << endl;
	}
}

其原理就是[]返回了插入位置的second值:如果没有默认int构造的是0;加一就为1了刚好起到计数赋值作用;插入了,返回的是find到的迭代器的second,加一刚好等于计数

除了插入的功能外,其实也可以是修改的功能,将second修改成自己想要的数据

当然[]当查找需谨慎,因为找不到这个值,它就会插入了

2.multimap

multimap不提供方括号,因为它可以有多个一样的,所以查找插入无意义

find依然找到的是中序的第一个数据

 当然它也可以用来统计数目,不过想要判断在对象中是否有相同的值

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

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

相关文章

zookeeper + kafka集群搭建详解

目录 1.消息队列介绍 1.为什么需要消息队列 &#xff08;MO&#xff09; 2.使用消息队列的好处 3.消息队列的两种模式 2.Kafka相关介绍 1.Kafka定义 2.Kafka简介 3. Kafka的特性 3.Kafka系统架构 1. Broker&#xff08;服务器&#xff09; 2. Topic&#xff08;一个队…

GaussDB数据库存储过程介绍

文章目录一、前言二、GaussDB中的定义三、存储过程的使用场景四、存储过程的使用优缺点五、存储过程的示例及示例解析1、GaussDB存储过程语法格式2、GaussDB存储过程语法示例3、存储过程的调用方法七、总结一、前言 华为云数据库GaussDB是一款高性能、高安全性的云原生数据库&…

链表基础知识

1.链表必知必会 什么是链表? 链表是一种通过指针串联在一起的线性结构&#xff0c;每一个节点由两部分组成&#xff0c;一个是数据域一个是指针域&#xff08;存放指向下一个节点的指针&#xff09;&#xff0c;最后一个节点的指针域指向null&#xff08;空指针的意思&#…

23北京邮电大学备考经验

目录【写在前面】本科成绩择校历程英语复习数学复习政治复习专业课复习其它建议笔记复盘压力处理恋爱关系【写在最后】【写在前面】 初试成绩&#xff1a; 本科成绩 总体&#xff1a;浙江某双非学校的软件工程专业、综合测评成绩班级前两名、浙江省省级优秀毕业生、发表过论…

【Node】Node.js 资源汇总推荐

【导读】&#xff1a;Node.js 是一个开源、跨平台的&#xff0c;用于编写服务器和命令行的 JavaScript 运行时工具。awesome-nodejs 是sindresorhus发起维护的 Node.js 资源列表&#xff0c;内容包括&#xff1a;命令行工具、日志、调试、HTTP、构建工具、文件系统、模板、Web …

Elasticjob(2.1.4) failover 、misfire及执行线程池分析

Failover 当设置failover为true时候&#xff0c;elasticjob 集群通过zookeeper 的event watcher 监听是否有instance 丢失&#xff0c;然后对丢失instance 对应的分片进行立即执行。重复一下&#xff0c;failover是立即执行&#xff0c;不是按crontab时间来触发&#xff0c;这…

基于RDF本体模型和图数据库实现知识查询与推理

基于RDF本体模型和图数据库实现知识查询与推理 基于RDF本体模型和图数据库实现知识查询与推理一、案例本体模型解释二、数据构建与查询 Here’s the table of contents: 基于RDF本体模型和图数据库实现知识查询与推理 本文主要使用ONgDB图数据库和Neosemantics组件&#xff0c;…

自建个人音乐播放器Navidrome - 内网穿透实现在外随时访问

文章目录 1. 前言2. Navidrome网站搭建2.1 Navidrome下载和安装2.1.1 安装并添加ffmpeg2.1.2下载并配置Navidrome2.1.3 添加Navidrome到系统服务 2.2. Navidrome网页测试 3. 本地网页发布3.1 cpolar的安装和注册3.2 Cpolar云端设置3.3 Cpolar本地设置 4. 公网访问测试5. 结语 转…

【Android实战开发】flutter实现网络请求的方法示例

Flutter网络请求使用的是Dio。Dio是一个强大易用的dart http请求库&#xff0c;支持Restful API、FormData、拦截器、请求取消、Cookie管理、文件上传/下载……. Flutter json数据解析是使用了json_serializable package包。它是一个自动化源代码生成器&#xff0c;可以为我们…

C++快速幂详解例题

基本概念 什么是快速幂呢&#xff1f;个人理解&#xff0c;就是更快速的计算幂运算。 比如计算a^b 刚学这个算法的时候我也很疑惑&#xff0c;幂运算不是有现成的公式么&#xff0c;直接pow&#xff08;a,b&#xff09;不就好了吗&#xff1f; 后来才明白&#xff0c;pow(a,b)的…

三分钟了解什么是时序数据库

在介绍时序数据库之前&#xff0c;我们先来看看什么是时序数据。时序数据就是基于时间排序的数据&#xff0c;再通过时间坐标将这些数据连接起来&#xff0c;形成一个折线图&#xff0c;直观地展示一个指标在过去一段时间内的走势和规律&#xff0c;帮助定位数据异常点。 时序…

Oracle中Archived redolog的生成

目录 一、问题预览 二、问题解答 一、问题预览 大家都知道 Oracle 中 online redolog切换后会生成 archived redolog&#xff0c;心里默认的就是 online redolog 切换后 archived redolog 已经生成。切换示意图&#xff0c;如下图所示。 但事实真的是这样吗&#xff1f; 二、…

C++ 23 实用工具(一)

C 23 实用工具&#xff08;一&#xff09; 工具函数是非常有价值的工具。它们不仅可以用于特定的领域&#xff0c;还可以应用于任意值和函数&#xff0c;甚至可以创建新的函数并将它们绑定到变量上。 常用函数 你可以使用各种变体的 min、max 和 minmax 函数来对值和初始化列…

【使用ChatGPT自动化】批量转换.xls文件为.xlsx文件

第1次提问&#xff1a; 我&#xff1a;我想使用Python批量转换.xls文件为.xlsx文件&#xff0c;请你提供代码 它&#xff1a; 当涉及到批量处理文件时&#xff0c;我们通常需要使用Python中的os模块和glob模块。os模块用于管理文件和目录&#xff0c;glob模块用于匹配文件路径名…

Visual Studio Code 1.77 发布!

欢迎使用 Visual Studio Code 2023 年3月版。此版本有许多更新&#xff0c;其中一些主要亮点包括&#xff1a; 无障碍改进&#xff1a;新的悬停、通知和 Sticky Scroll 快捷键 复制 GitHub 深度链接&#xff1a;在编辑器内创建永久链接和 HEAD 链接 笔记本保存格式&#xff1…

软件测试流程进阶----四年软件测试总结

工作四年了&#xff0c;我一直希望让自己每年对测试的理解更深入一层。工作一年的时候&#xff0c;我谈轮了自己对各种测试的理解&#xff0c;这一年来&#xff0c;虽然对那些理概念的有所加强&#xff0c;自我感觉没有什么质的变化。前些天听我们公司的一位测试经理讲《敏捷测…

精准抓住核心要点!!!十名面试官总结出这样一份面试通关答案,还不赶紧开始“作弊”通关!!!

金三银四求职季&#xff0c;但最近很多朋友私信说&#xff1a; 熬过了去年的寒冬&#xff0c;却没躲过如今的内卷&#xff1b; 打开Boss直拒&#xff0c;一排已读不回&#xff1b; 大部分回复的都是外包&#xff0c;薪资低于预期&#xff0c;对技术水平要求却远超从前&#x…

大数据和 CRM系统:它们如何帮助中小企业?

作为中小企业主&#xff0c;你可能在想&#xff0c;"大数据与我有什么关系&#xff1f;"但如果你使用某些类型的业务应用&#xff0c;即使预算很少&#xff0c;你也可以从大数据中获益。一个最好的例子是客户关系管理&#xff08;CRM&#xff09;系统&#xff0c;它提…

二极管反向恢复过程详细解析

二极管反向恢复过程&#xff0c;现代脉冲电路中大量使用晶体管或二极管作为开关, 或者使用主要是由它们构成的逻辑集成电路。而作为开关应用的二极管主要是利用了它的通(电阻很小)、断(电阻很大) 特性, 即二极管对正向及反向电流表现出的开关作用。二极管和一般开关的不同在于,…

在线帮助中心对企业的作用及解决方案

帮助中心对于一款互联网产品来说&#xff0c;重要性不言而喻。随着公司客户服务水平的不断提高&#xff0c;越来越多的公司逐渐重视客户服务。一个好的在线帮助中心必定能提高客户的转化率。那么&#xff0c;在线帮助中心对企业的帮助和作用有哪些呢? 在线帮助中心的作用 1.快…