map与set使用方法总结

news2024/11/25 10:42:46

一,map与set简介

   map与set本质上便是一个关联容器,它们的底层都是一个叫做红黑树的数据结构。当然,所谓的红黑树又是一个二叉搜索树。所以追根溯源,map和set都是用二叉搜索树(红黑树)实现的容器。

   在C++中,容器又分为序列化容器和关联容器。在这里的map和set就是关联容器。map和set中的元素是按关键字来保存和访问的。那什么是顺序容器呢?其实所谓的顺序容器就是我们曾经学过的list,vector,deque等容器。这些容器中的元素是按照它们在容器中的位置来访问和存储的

    map与set之间也是有差异的。map是一个key-value模型的容器,也叫键值对。而set是一个key-key模型的容器。接下来便来详细的介绍一下这两个容器的用法和特点。

二,map和set的用法和特点

1.map

首先来看看库里面的map定义:

在这个定义里面,我们首先知道的便是map是一个模板,因为我们看到了template,然后map还是一个类,因为在map前面有一个class。所以map便是一个模板类。

2.键值对

这个键值对是我们在学习map之前必须了解的一个东西。这个键值对是一个表示一一对应关系的一种数据结构。英文名是pair,在文档中长这样:

也是一个类模板。这个结构便是我们实现kv模型的关键一步。在map中也可以找到它的身影:

   

并且在这里面还可以看到在map里面第一个key的值是不能改的因为在key的前面有一个const修饰符,但是第二个value值是可以改的。在SGI版本的STL文件内,对于键值对的实现如下:

template <class T1, class T2>
struct pair
{
typedef T1 first_type;
typedef T2 second_type;
T1 first;
T2 second;
pair(): first(T1()), second(T2())
{}
pair(const T1& a, const T2& b): first(a), second(b)
{}
};

在这里不过多解释,我们知道就可以了。

3.map的各种功能函数

截图如下:

在这个截图里面可以看到map的功能函数还是很多的,像构造函数,各种迭代器函数,插入删除函数等等函数,map里面都有。而在些功能函数里面最屌的还是operator[ ]。这个函数可以帮我们实现使用key值来查找value值。比如这段代码:

#include<map>
#include<iostream>
using namespace std;

int main()
{
	map<string, int> Map;
	Map.insert(make_pair("string", 5));
	cout << Map["string"] << " ";//使用字符串为下标
	return 0;
}

这段代码便是,要使用字符串为下标来寻找定位value值。真是不可思议啊,以前我们在用到[]时都是用数字加上[]来访问的,现在竟然变成了字符串来。现在便来看看它是如何实现的:

呐,看得懂吗?反正我是看不懂了。等我功力强一些再来拆解它把。

2.set

set和map一样也是一种树形关联容器。但是和map不一样的便是它是一个key-key类型的关联容器。set是不能插入重复元素的,但是set的变种兄弟mutil_set是可以支持插入重复元素的。现在来看看文档内的set模样:

可以发现,和map长得真像。现在再来看看set的功能函数:

可以看到set的功能函数和map的功能函数有很多是相同的,但是很明显缺少了一个[]。也就是说,set不支持[ ]。这是为什么呢?可以自己想想。

 

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

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

相关文章

内衣洗衣机和手洗哪个干净?好用的内衣洗衣机推荐

在日常生活中&#xff0c;我们的衣服不可避免地会沾染上各种细菌、毛发和污渍&#xff0c;将它们与贴身衣物混合清洗&#xff0c;很容易发生交叉感染&#xff0c;而被感染后&#xff0c;贴身衣物也有可能导致我们人体引起皮肤病。这也是为什么大部分人都喜欢用手洗的原因&#…

Python机器学习基础(三)---数据预处理

一.数据预处理作用 数据预处理会将选定的数据转换为我们可以使用的形式或可以提供给ML算法的形式&#xff0c;以使其符合机器学习算法的期望。 二.数据处理的常用方法 1.规范化 数据规范化是使属性数据按比例缩放&#xff0c;这样就将原来的数值映射到一个新的特定区域中&#…

揭秘拍卖竞价源码:10个必知的关键细节

拍卖竞价源码作为数字化时代中的一大亮点&#xff0c;不仅在技术领域引起了高度关注&#xff0c;并且在商业应用中展现出巨大潜力。在本文中&#xff0c;我们将揭秘拍卖竞价源码中的10个关键细节&#xff0c;助你一窥这一领域的深入内涵。 1. 拍卖竞价源码的由来 拍卖竞价源码…

侧击雷如何检测预防

侧击雷是一种雷击的形式&#xff0c;指的是雷电从建筑物的侧面打来的直接雷击。侧击雷对高层建筑物的防雷保护提出了更高的要求&#xff0c;因为一般的避雷带或避雷针不能完全保护住建筑物的侧面。侧击雷可能会对建筑物的结构、设备和人员造成严重的损害&#xff0c;甚至引发火…

ninja 编译介绍

首先献上官方链接 https://ninja-build.org/manual.html Ninja 何以存在&#xff1f; 从官方文档看出&#xff0c;编译很快&#xff01;怎么实现的呢&#xff1f;&#xff1f;所以&#xff0c;还是值得了解一下的&#xff0c;继续~ 编译优势 项目中使用 具体语法&#xff0c;…

使用 Stable Diffusion Img2Img 生成、放大、模糊和增强

在线工具推荐&#xff1a; Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 3D数字孪生场景编辑器 Stable Diffusion 2022.1 Img5Img 于 2 年发布&#xff0c;是一款革命性的深度学习模型&#xff0c;正在重新定义和推动照片级真实…

Spring全家桶源码解析--2.3 Spring bean 的依赖注入--@Autowired@Value

文章目录 前言一、Autowired&Value&#xff1a;1.1 Autowired&#xff1a;1.2 Value&#xff1a; 二、依赖注入&#xff1a;2.1 注入点获取&#xff1a;2.2 通过 populateBean 入口依赖注入2.2.1 populateBean &#xff1a;主要通过 postProcessProperties 方法进行依赖注入…

Android WebView专题

WebView 专题 第一个WebView程序&#xff1a;加载远程网址 Layout添加WebView组件&#xff1b; <WebViewandroid:id"id/webView_first"android:layout_width"match_parent"android:layout_height"match_parent"/>初始化组件&#xff0c;加…

新闻发稿有什么用?新闻发稿怎么做?

随着互联网的普及和信息传播速度的加快&#xff0c;新闻发稿成为越来越多企业和个人宣传自身形象、扩大品牌知名度和影响力的有效手段。本文将探讨新闻发稿的作用和如何进行新闻发稿。 一、新闻发稿的作用 1.提高品牌知名度 通过新闻发稿&#xff0c;企业或个人可以在媒体上展…

谁输了,就往衣服里面倒水,欲望秀场与亲密的操控,当一位女博士生成为主播

在澎湃新闻上&#xff0c;读到香港大学博士生王怡霖的一篇自述文章。 为了研究秀场直播&#xff0c;她跟一家公会签约&#xff0c;当了秀场主播。 感谢王怡霖&#xff0c;愿意做这样的研究&#xff0c;为我们提供了解社会现实的一个观察视角。 三年主播体验观察下来&#xff0c…

【SpringBoot篇】使用Spring Cache高效处理缓存数据

文章目录 &#x1f339;简述Spring Cache&#x1f3f3;️‍&#x1f308;常用注解&#x1f33a;使用SpringCache&#x1f6f8;Cacheable注解⭐测试 &#x1f6f8;CacheEvict&#x1f38d;一次清理一条数据&#x1f38d;一次删除多条数据 Spring Cache是一个框架,只要简单加一个…

电脑监控软件不联网是不是就没事?

电脑监控软件不联网是不是就没事&#xff1f; 回答&#xff1a;不是&#xff0c;不联网仍旧会正常工作。 虽然电脑监控软件在不联网的情况下无法通过网络进行数据传输&#xff0c;但并不意味着它完全失效。 有些监控软件在安装时可能分为管理端、服务器端和员工端&#xff0c…

基于 Lua 写一个爬虫程序

你想要基于 Lua 写一个爬虫程序来爬取的内容。我可以给你一个基本的框架&#xff0c;但是请注意这只是一个示例&#xff0c;并且你可能需要根据实际情况进行调整。 -- 首先&#xff0c;我们需要引入一些必要的模块 local http require "socket.http" local json r…

【Python基础篇】变量

博主&#xff1a;&#x1f44d;不许代码码上红 欢迎&#xff1a;&#x1f40b;点赞、收藏、关注、评论。 格言&#xff1a; 大鹏一日同风起&#xff0c;扶摇直上九万里。 文章目录 一 Python中变量的定义二 Python中变量的使用三 Python中变量的类型四 Python中变量的删除五 …

什么是稳定扩散中的采样步骤?

在线工具推荐&#xff1a; Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 3D数字孪生场景编辑器 本指南将深入探讨采样步骤的基础知识、它们对图像生成的影响&#xff0c;以及优化这些步骤以获得最佳结果的技巧。 了解稳定扩散中…

锅鸡unity和unityHub泼姐

链接在下面 支持pj所有国际版本的Unity和UnityHub。 自从 Unity2022.2.0 及以上版本重构了License逻辑&#xff0c;目前无法pj。问题跳转&#xff1a;#78 下载地址 Unity国际版 官方下载地址&#xff08;需要配置代理&#xff0c;代理没配置好可能会下载的国内版&#xff09…

应用亚马逊云科技,Share Creators1个月内上线生成式AI生图模块

随着生成式AI在全球范围爆火&#xff0c;如何充分利用生成式AI自动生成内容提高创作效率已成为设计领域创新的关键突破口。对于设计行业和游戏行业的众多企业和团队而言&#xff0c;管理数字资产的能力是其实现高效创作最大的挑战之一&#xff0c;也是在降本增效的流程中非常容…

服务器CPU高居不下,JAVA线程占用如何排查

1. 查看占用cpu占用过高进程的pid 使用 top名称查看 这里可以看的出来进程是20943 2. 查看该进程中哪个线程占用大量 CPU ps -mp 20943 -o THREAD,tid,time | grep $(ps -mp 20943 -o THREAD,tid,time |awk NR>2 {print $2}|sort -nr|head -1)|head -1 root 1.0 1…

Fourier分析导论——第5章——实数据R上的Fourier变换(E.M. Stein R. Shakarchi)

第5章 实数域ℝ上的Fourier变换 The theory of Fourier series and integrals has always had major difficulties and necessitated a large math- ematical apparatus in dealing with questions of con- vergence. It engendered the development of methods of summa…

arcgis--浮点型栅格数据转整型

利用【Spatial Analyst工具】-【数学】-【转为整型】工具&#xff0c;将浮点型数据转为整型。如下&#xff1a; 【转为整型】对话框参数设计如下&#xff1a; 转换结果如下&#xff1a;