【C++】map、set基本用法
欢迎来到我的Blog,点击关注哦💕
前言:
C++的
STL已经学习很大一部分了,接下来介绍的是mapset是c++的是两种关联容器。
简单介绍
map set:
- 两者都使用红黑树作为底层数据结构来存储元素。
- map是一种键值对容器,其中每个键都是唯一的,并且与一个值相关联。
- set则是一个元素集合,其中的每个元素也是唯一的,但它不存储与元素相关联的值。
set(K模型)
set使用介绍
set是标准模板库(STL)中的一种关联容器,它存储的元素是唯一的,并且按照特定的顺序(默认是升序)自动排序。
set的构造
| 函数声明 | 功能介绍 |
|---|---|
| set (const Compare& comp = Compare(), const Allocator& = Allocator() ); | 构造空的set |
| set (InputIterator first, InputIterator last, const Compare& comp = Compare(), const Allocator& = Allocator() ); | 用[first, last)区 间中的元素构造 |
| set set ( const set& x); | set的拷贝构造 |
set的迭代器
| 函数声明 | 功能介绍 |
|---|---|
| iterator begin() | 返回set中起始位置元素的迭代器 |
| iterator end() | 返回set中最后一个元素后面的迭代器 |
| const_iterator cbegin() const | 返回set中起始位置元素的const迭代器 |
| const_iterator cend() const | 返回set中最后一个元素后面的const迭代器 |
| reverse_iterator rbegin() | 返回set第一个元素的反向迭代器,即end |
| reverse_iterator rend() | 返回set最后一个元素下一个位置的反向迭代器, 即rbegin |
| const_reverse_iterator crbegin()const | 返回set第一个元素的反向const迭代器,即cend |
| const_reverse_iterator crend() const | 返回set最后一个元素下一个位置的反向const迭 代器,即crbegin |
set的容量
| 函数声明 | 功能介绍 |
|---|---|
| bool empty ( ) const | 检测set是否为空,空返回false,否则返回true |
| size_type size() const | 返回set中有效元素的个数 |
set的修改
| 函数声明 | 功能介绍 |
|---|---|
| pair insert ( const value_type& x ) | 在set中插入元素x,实际插入的是构成的 键值对,如果插入成功,返回<该元素在set中的 位置,true>,如果插入失败,说明x在set中已经 存在,返回在set中的位置,false> |
| void erase ( iterator position ) | 删除set中position位置上的元素 |
| size_type erase ( const key_type& x ) | 删除set中值为x的元素,返回删除的元素的个数 |
| void erase ( iterator first, iterator last ) | 删除set中[first, last)区间中的元素 |
| void swap ( set& st ); | 交换set中的元素 |
| void clear ( ) | 将set中的元素清空 |
| iterator find ( const key_type& x ) const | 返回set中值为x的元素的位置 |
| size_type count ( const key_type& x ) const | 返回set中值为x的元素的个数 |
multiset
它允许存储具有相同值的元素,并且这些元素会根据特定的排序准则自动排序。与 set 容器不同,multiset 允许重复的元素值。
multiset的操作大致是一样的唯一的额区别就是,multiset允许有重复的元素。- 针对set以下接口,大致是留给
multiset
| 函数声明 | 功能介绍 |
|---|---|
| lower_bound | 返回比这个大于等于这个值的迭代器 |
| upper_bound | 返回大于这个值的迭代器 |
| equal_range | pair<iterator,iterator> equal_range (const value_type& val) const 返回这个值的区间,满足左闭又开。 |
pair<iterator,iterator>这个返回值是键对值。
map(KV模型)
map是一种关联容器,它存储元素作为键值对(key-value pairs),其中每个键都是唯一的。
map的使用介绍
map的迭代器
| 函数声明 | 功能介绍 |
|---|---|
| begin()和end() | begin:首元素的位置,end最后一个元素的下一个位置 |
| cbegin()和cend() | 与begin和end意义相同,但cbegin和cend所指向的元素不能修改 |
| rbegin()和rend() | 反向迭代器,rbegin在end位置,rend在begin位置,其 ++和–操作与begin和end操作移动相反 |
| crbegin()和crend() | 与rbegin和rend位置相同,操作相同,但crbegin和crend所 指向的元素不能修改 |
map的容量与元素访问
| 函数声明 | 功能简介 |
|---|---|
| bool empty ( ) const | 检测map中的元素是否为空,是返回 true,否则返回false |
| size_type size() const | 返回map中有效元素的个数 |
| mapped_type& operator[] (const key_type& k) | 返回去key对应的value |
- 值得注意的是
[]由于map存储的值的键值对.
注意:
- 在元素访问时,有一个与operator[]类似的操作at()(该函数不常用)函数
- 都是通过 key找到与key对应的value然后返回其引用
- 不同的是:当key不存在时,operator[]用默认 value与key构造键值对然后插入,返回该默认value,at()函数直接抛异常。

代码解析
pair<iterator, bool> ret = insert(key, V());
return ret.first->second;
- 如果key存在,则返回这等于key的迭代器。
- 如果key不存在,在则返回新插入节点的迭代器。
pair
std::pair 是 C++ 标准模板库(STL)中的一个模板结构,用于存储一对值。

在map中是如何赋值:
void TestMap()
{map<string, string> m;string s1("苹果");string s2("apple");m.insert(pair<string, string>(s1, s2));//C++98pair构造m.insert(make_pair("桃子", "peach"));//C++11 多参数的构造函数隐式类型转换m.insert({ "香蕉","banana" });for (auto e : m){cout << e.first << ":" << e.second << endl;}
}

map中元素的修改
| 函数声明 | 功能简介 |
|---|---|
| pair insert ( const value_type& x ) | 在map中插入键值对x,注意x是一个键值对,返回值也是键值对:iterator代表新插入 元素的位置,bool代表释放插入成功 |
| void erase ( iterator position ) | 删除position位置上的元素 |
| size_type erase ( const key_type& x ) | 删除键值为x的元素 |
| void erase ( iterator first, iterator last ) | 删除[first, last)区间中的元素 |
| void swap ( map& mp ) | 交换两个map中的元素 |
| void clear ( ) | 将map中的元素清空 |
| iterator find ( const key_type& x ) | 在map中插入key为x的元素,找到返回该元素的位置的迭代器,否则返回end |
| const_iterator find ( const key_type& x ) const | 在map中插入key为x的元素,找到返回该元素的位置的const迭代器,否则返回cend |
| size_type count ( const key_type& x ) const | 返回key为x的键值在map中的个数,注意 map中key是唯一的,因此该函数的返回值 要么为0,要么为1,因此也可以用该函数来 检测一个key是否在map中 |
multimap
multimap是C++标准模板库(STL)中的一种关联容器,它存储键值对,并且允许一个键对应多个值。这与map容器不同,后者对于每个键只存储一个值。
| 函数声明 | 功能介绍 |
|---|---|
| lower_bound | 返回比这个大于等于这个值的迭代器 |
| upper_bound | 返回大于这个值的迭代器 |
| equal_range | pair<iterator,iterator> equal_range (const value_type& val) const 返回这个值的区间,满足左闭又开。 |
map和set对比
综上所述map和set很相似,很多接口都一样,区别如下
| 对比维度 | map | set |
|---|---|---|
| 存储元素 | 键值对 | 单个值 |
| 唯一性 | 键唯一 | 元素唯一 |
| 访问方式 | 通过键访问值 | 通过迭代器遍历 |
| 修改能力 | 可以通过键修改值 | 元素不可修改 |
| 默认排序 | 键升序 | 值升序 |
| 底层结构 | 红黑树 | 红黑树 |
|
| 访问方式 | 通过键访问值 | 通过迭代器遍历
|
| 修改能力 | 可以通过键修改值 | 元素不可修改
|
| 默认排序 | 键升序 | 值升序
|
| 底层结构 | 红黑树 | 红黑树 |
相关文章:
【C++】map、set基本用法
欢迎来到我的Blog,点击关注哦💕 前言: C的STL已经学习很大一部分了,接下来介绍的是map set是c的是两种关联容器。 简单介绍 map set: 两者都使用红黑树作为底层数据结构来存储元素。map是一种键值对容器,其中每个键…...
模型 闭环原理
系列文章 分享 模型,了解更多👉 模型_思维模型目录。反馈驱动,持续循环,缺陷亦被放大。 1 闭环原理的应用 1.1 闭环原理解读 AI自我训练,从人工智能变成人工智障 这里主要使用闭环原理来解释 AI 自我训练导致的问题。…...
3007. 价值和小于等于 K 的最大数字(24.8.21)
前言 感谢皇家笨阿宝的指导 题目 给你一个整数 k 和一个整数 x 。整数 num 的价值是它的二进制表示中在 x,2x,3x 等位置处设置位的数目(从最低有效位开始)。下面的表格包含了如何计算价值的例子。 XnumBinary RepresentationPri…...
微服务 - 分布式锁的实现与处理策略
作者:逍遥Sean 简介:一个主修Java的Web网站\游戏服务器后端开发者 主页:https://blog.csdn.net/Ureliable 觉得博主文章不错的话,可以三连支持一下~ 如有疑问和建议,请私信或评论留言! 分布式锁的实现与处理…...
Catf1ag CTF Web(九)
前言 Catf1agCTF 是一个面向所有CTF(Capture The Flag)爱好者的综合训练平台,尤其适合新手学习和提升技能 。该平台由catf1ag团队打造,拥有超过200个原创题目,题目设计注重知识点的掌握,旨在帮助新手掌握C…...
QT QFileDialog 类
QFileDialog 类 QFileDialog 类 QFileDialog 是 Qt 库中的一个类,用于提供文件选择对话框, 允许用户选择文件或目录。QFileDialog 提供了多种静态方法和实例方法, 用于创建和配置文件对话框,并获取用户选择的文件或目录。 QObje…...
了解 K-Means 聚类的工作原理(详细指南)
一、说明 K-means 的目标是将一组观测值划分为 k 个聚类,每个观测值分配给均值(聚类中心或质心)最接近的聚类,从而充当该聚类的代表。 在本文中,我们将全面介绍 k 均值聚类(最常用的聚类方法之一࿰…...
预警先行,弯道哨兵让行车更安全
预警先行,弯道哨兵让行车更安全”这句话深刻体现了现代交通安全理念中预防为主、科技赋能的重要性。在道路交通中,尤其是复杂多变的弯道区域,交通事故的发生率往往较高,因此,采取有效的预警措施和引入先进的交通辅助设…...
预约咨询小程序搭建开发,uniapp前端,PHP语言开发
目录 前言: 一、预约小程序搭建功能介绍 二、示例代码片段 前言: 预约咨询小程序适合需付费咨询和交流的场景:比如讲师,摄影,婚庆,美发,律师,心理等等支持商家入驻支持视频、图文、线下、电话等方式在线支付咨询。 一、预约小程…...
极速文件预览!轻松部署 kkFileView 于 Docker 中!
大家好,这几天闲的难受,决定给自己找点事做。博主的项目中有个文件预览的小需求,原有方案是想将文件转换成 PDF 进行预览。本着能借鉴就绝对不自己写的原则。今天就让我们简单试用一下 kkFileView 文件预览服务,一起探索它的强大功…...
某验九宫格分类识别
注意,本文只提供学习的思路,严禁违反法律以及破坏信息系统等行为,本文只提供思路 如有侵犯,请联系作者下架 九宫格分类如下 这种就是最简单的分类识别了,用迁移学习resnet训练即可,下面来看成品 训练代码查看往期文章中就有,部分代码如下: DEVICE = torch.device(…...
未来展望:观测云技术的发展与企业业务的融合
随着技术的不断进步,观测云作为企业数据监控和分析的关键工具,其发展与企业业务的融合趋势显得尤为重要。在未来,观测云技术将如何演进,以及它将如何更深层次地与企业业务相融合,是值得我们深入探讨的问题。 首先&…...
day6JS-DOM(文档对象模型)
DOM树 DOM 操作 1. 获取元素 1.1 根据id名获取元素 document.getElementById("id名"); 案例: <body><div id"box">div盒子</div><h1>一级标题</h1><script>console.log(document.getElementById(&quo…...
MySQL列表分区分区表
什么是列表分区分区表? 列表分区是一种根据某个列的离散值将表数据分割成多个分区的分区方式。在列表分区中,每个分区都有自己的离散值集合,当插入数据时,MySQL会根据指定的列值将数据分配到相应的分区中。这种分区方式可以使得表…...
qt打包程序方法(非常好用)
1.下载 Index of /official_releases/qt-installer-framework/4.6.1 bi...
IP地址管理:优化网络布局与提升效率
在日益复杂的网络环境中,IP地址管理成为了网络管理员日常工作中不可或缺的一部分。有效的IP地址管理不仅能够优化网络布局,提升网络运行效率,还能确保网络安全和稳定性。本文将探讨IP地址管理的重要性、实施策略以及最佳实践。 一、IP地址管…...
老古董Lisp实用主义入门教程(5):好奇先生用Lisp探索Lisp
鲁莽先生什么都不管 鲁莽先生打开电脑,安装一堆东西,噼里啪啦敲了一堆代码,叽里呱啦说了一堆话,然后累了就回家睡觉了。 这可把好奇先生的兴趣勾起来,他怎么也睡不着。好奇先生打开电脑,看了看鲁莽先生留…...
linux文件——用户缓冲区——概念深度理解、IO模拟实现
前言:本篇文章主要讲解文件缓冲区。 讲解的方式是通过抛出问题, 然后通过分析问题, 将缓冲区的概念与原理一步一步地讲解。同时, 本节内容在最后一部分还会带友友们模拟实现一下c语言的printf, fprintf接口,…...
Selenium模拟鼠标滚动页面:实现自动化测试中的页面交互
Selenium模拟鼠标滚动页面:实现自动化测试中的页面交互 在进行网页自动化测试时,经常需要模拟用户的滚动行为来加载更多内容或触发页面上的某些交互。Selenium WebDriver提供了强大的工具来模拟这些用户行为,包括鼠标滚动。本文将介绍如何使…...
Eureka原理与实践:构建高效的微服务架构
Eureka原理与实践:构建高效的微服务架构 Eureka的核心原理Eureka Server:服务注册中心Eureka Client:服务提供者与服务消费者 Eureka的实践应用集成Eureka到Spring Cloud项目中创建Eureka Server创建Eureka Client(服务提供者&…...
多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...
MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...
蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练
前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1):从基础到实战的深度解析-CSDN博客,但实际面试中,企业更关注候选人对复杂场景的应对能力(如多设备并发扫描、低功耗与高发现率的平衡)和前沿技术的…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...
工程地质软件市场:发展现状、趋势与策略建议
一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...
江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命
在华东塑料包装行业面临限塑令深度调整的背景下,江苏艾立泰以一场跨国资源接力的创新实践,重新定义了绿色供应链的边界。 跨国回收网络:废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点,将海外废弃包装箱通过标准…...
ServerTrust 并非唯一
NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...
uniapp微信小程序视频实时流+pc端预览方案
方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度WebSocket图片帧定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐RTMP推流TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…...
NPOI操作EXCEL文件 ——CAD C# 二次开发
缺点:dll.版本容易加载错误。CAD加载插件时,没有加载所有类库。插件运行过程中用到某个类库,会从CAD的安装目录找,找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库,就用插件程序加载进…...
FFmpeg:Windows系统小白安装及其使用
一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】,注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录(即exe所在文件夹)加入系统变量…...
