map与set使用方法总结

一,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.mfbz.cn/a/143322.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【工程部署】在RK3588上部署OCR(文字检测识别)(DBNet+CRNN)

硬件平台&#xff1a; 1、firefly安装Ubuntu系统的RK3588&#xff1b; 2、安装Windows系统的电脑一台&#xff0c;其上安装Ubuntu18.04系统虚拟机。 参考手册&#xff1a;《00-Rockchip_RKNPU_User_Guide_RKNN_API_V1.3.0_CN》 《RKNN Toolkit Lite2 用户使用指南》 1、文…

【kafka】windows安装启动

1.zookeeper的安装与启动 快速打开window powershell&#xff1a; windowx&#xff0c;选 2.kafka下载 —注意kafka和zookeeper需要版本匹配 安装路径 注意&#xff0c;kafka安装目录不能有空格。文件下载到&#xff1a; D:\Program_Files\kafka_2.12-3.6.0新建logs文件 修改c…

语聚AI助力微信客服系统与企业知识库的API连接,提升电商平台用户运营效果

建立连接&#xff1a;语聚AI与微信客服系统的API集成 在现代电商运营中&#xff0c;智能客服系统已经成为一种必备的工具。而在这方面&#xff0c;微信客服系统因其广泛的用户基础和便捷的操作方式&#xff0c;成为了业界广泛采用的工具。但是&#xff0c;为了更好地满足用户需…

算法笔记——递归(1)

这里写目录标题 递归的思想序列求最大值翻转字符串斐波那契数列数塔回文字符串上楼汉诺塔棋盘覆盖问题数字螺旋矩阵盒分形 递归的思想 子问题须与原始问题为同样的事&#xff0c;且更为简单。 不能无限制地调用本身&#xff0c;须有个出口&#xff0c;化简为非递归状况处理 序…

el-table本地与线上的样式不一致出现错乱

使用el-table的时候有几个表头是循环出来的&#xff0c;出现在本地运行的时候&#xff0c;表头内el-input输入框样式正常&#xff0c;但是发布以后出现样式错乱问题 线上样式错乱&#xff1a;​ 本地正常&#xff1a; 出现这个问题的原因是我有几个表头是循环出来的&#xff0…

阿里云2核2G云服务器99元一年!3M带宽的ECS云服务器哦

经济型e实例2核2G3M带宽优惠价99元一年 除了轻量服务器配置&#xff0c;经济型e实例2核2G3M配置也成为了用户关注的焦点。这款云服务器以99元一年的价格&#xff0c;适合个人和普通企业用户搭建网站、开发测试等需求。 我买的是阿里云这款99元的云服务器&#xff0c;活动参与地…

结婚请柬H5页面制作系统源码 带完整搭建教程

在过去的几年中&#xff0c;移动设备的普及率越来越高&#xff0c;人们越来越倾向于在手机上浏览网页。因此&#xff0c;开发一款基于H5技术的结婚请柬制作系统&#xff0c;可以满足用户在移动设备上浏览请柬的需求。今天源码小编来给大家介绍一款结婚请柬H5页面制作的源码系统…

开发技术-批量设置redis过期时间

1. 背景 项目组使用 Redis 太过奔放&#xff0c;许多 key 并没有设置过期时间&#xff0c;导致 Redis 服务器内存压力过大&#xff0c;需要成批次的为 key 设置过期时间。 2. 方法 import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.st…

将按键放到输入框内:

如何将将Button放到输入框内&#xff1f; 效果图&#xff1a; 步骤如下&#xff1a; button 外围用template 包裹一层 <template #suffix v-if"row.WorkerRole TPM"> <el-inputtype"text"v-model"row.JobNumber"placeholder"…

2023年最新前端面试题汇总大全(含答案超详细,HTML,JS,CSS汇总篇)-- 持续更新

专项练习–持续更新 HTML篇CSS篇JS篇Vue篇TypeScript篇React篇微信小程序篇前端面试题汇总大全二&#xff08;含答案超详细&#xff0c;Vue&#xff0c;TypeScript&#xff0c;React&#xff0c;微信小程序&#xff0c;Webpack 汇总篇&#xff09;-- 持续更新 前端面试题汇总大…

平价护眼台灯推荐,好用且性价比高的护眼台灯推荐

想要选好护眼台灯首先我们要知道什么是护眼台灯&#xff0c;大的方向来看&#xff0c;护眼台灯就是可以保护视力的台灯&#xff0c;深入些讲就是具备让灯发出接近自然光特性的光线&#xff0c;同时光线不会伤害人眼而出现造成眼部不适甚至是视力降低的照明设备。 从细节上看就…

智慧渔业捕捞计数项目设计书

&#xff08;一&#xff09;项目背景 根据捕捞水域的不同&#xff0c;我国水产捕捞可划分为海洋捕捞、远洋捕捞以及淡水捕捞三大类型。其中&#xff0c;淡水渔业主要是指在淡水水域进行捕捞、养殖以获得淡水水产品并对这些水产品进行加工的社会生产领域。 近年来&#xff0c;随…

酒店数据抓取

好的&#xff0c;以下是使用Haskell编写的一个简单的网页爬虫程序&#xff0c;用于抓取Booking.com和云地接酒店数据的示例。这个程序使用HTTP代理&#xff0c;代理信息为proxy_host: jshk.com.cn。 import Network.HTTP import Network.HTTP代理 import Network.URImain :: I…

CSS实现图片滑动对比

实现效果图如下&#xff1a; css代码&#xff1a; 知识点&#xff1a;resize: horizontal; 文档地址 <style>.image-slider {position: relative;display: inline-block;width: 500px;height: 300px;}.image-slider>div {position: absolute;top: 0;bottom: 0;left: …

学开发语言 求职互联网行业的未来发展

我喜欢回答各种各样的问题&#xff0c;自然也喜欢记录下自己的一些观点和看法。希望给朋友们多一点参考&#xff0c;也欢迎交流探讨。 提问&#xff1a; 自考本科&#xff0c;学的开发语言&#xff0c;问互联网行业求职和发展&#xff01; 作为一个资深码农&#xff0c;对这样…

Animate 2024 for mac动画制作软件

Animate 2024是一款由Adobe公司开发的强大动画制作软件&#xff0c;它能帮助用户轻松制作出各种精美的动画作品。Animate 2024拥有强大而直观的设计工作流程&#xff0c;能够让用户自由地构建动画场景、绘制精美的图形&#xff0c;并轻松添加动态效果。无论是传统手绘风格还是骨…

JavaScript中this关键字实践

● 在全局中&#xff0c; this关键字表示全局窗口 console.log(this);● 在严格模式下&#xff0c;this不指向函数本身&#xff0c;在非严格模式下&#xff0c;this指向全局窗口 console.log(this);const calcAge function (birthYear) {console.log(2037 - birthYear);cons…

空间数据结构笔记:层次包围盒树(Bounding Volume Hierarchy Based On Tree)

1 总览 层次包围盒树&#xff08;BVH树&#xff09;是一棵多叉树&#xff0c;用来存储包围盒形状。它的根节点代表一个最大的包围盒&#xff0c;其多个子节点则代表多个子包围盒。为了统一化层次包围盒树的形状&#xff0c;它只能存储同一种包围盒形状 2 AABB包围盒树&#x…

科研学习|研究方法——逻辑回归系数的显著性检验(python实现)

1. 背景 回归方程与回归系数的显著性检验 2. statsmodels 库 statsmodels库可以用来做逻辑回归、线性回归。并且会在summary中给出显著性检验的结果。最终我们想要的就是如下图的报告。 3. 计算过程 如果我们使用的sklearn构建的逻辑回归就没有办法直接输出这个报告&#xff0c…

Nexus的Linux服务器部署(菜鸟版)

Nexus的Linux服务器部署 一、下载与安装 使用Nexus搭建Maven私服&#xff0c;在离线环境中使用Maven&#xff0c;并自动从私服中下载依赖包和组件。 下载地址&#xff1a;https://www.sonatype.com/ 镜像仓库 腾讯云软件包镜像: https://mirrors.cloud.tencent.com/阿里软…
最新文章