【C++】map和set的介绍以及用法

【C++】map和set的介绍以及用法


个人主页

在这里插入图片描述

文章目录

⭐一、系列式容器和关联式容器

在之前学习过程中,我们也接触了STL中的部分容器,如:vector、string、list、deque等,这些都属于序列式容器,因为其底层是线性结构,里面存储的为数据本身。

关联式容器也是用来存储数据的,但不同的是,关联式容器的底层通常是非线性结构的,也就意味着两个位置具有紧密的关联关系,如果进行交换,它们的存储结构就被破坏了。

🚀二、set的使用

1. set类的介绍

我们来看看以下几个有关于set的要点:
1.set是用来存储唯一元素的容器,且按照一定的顺序进行排列。
2.set中不允许出现重复的元素,其本质是负责排序+去重。
3.set在底层是用红黑树来实现的。
4.set的比较默认按照小于进行。
5.set的正向迭代器遍历为升序序列,反向迭代器为降序序列。
6.在set类中的其内容可以进行删除,但不支持修改
7.set中查找某个元素的时间复杂度为logN。

2. set的构造

在set容器中,可以使用多种方式进行构造,以下是常见的构造方式:

1.默认构造:

set<int> s;

2.迭代器构造:

vector<int> ret ={1,2,3,4,5}; set<int>s(ret.begin(), ret.end());

3.初始化列表构造:

set<int> s ={1,2,3,4};

4.拷贝构造:

set<int> s1 ={1,2,3,4}; set<int>s2(s1);

3. set的迭代器

set容器提供了两种迭代器:一个是正向迭代器,还有一个为反向迭代器。

正向迭代器:
• begin() : 返回指向set容器中的第一个元素。
• end() : 返回指向set容器中的最后一个元素之后的位置。

在这里插入图片描述


反向迭代器:
• rbegin() : 返回指向set容器中的最后一个元素。
• rend() : 返回指向set容器中的第一个元素之前的位置。

在这里插入图片描述

4. set的常用函数

set容器中还提供了一些函数负责元素插入、查找、删除等操作的函数,下面是有关set常用的一些函数:

1.插入元素

在这里插入图片描述

根据文档内容我们可以知道插入元素有三种方式可以进行插入:
• 直接插入一个值val
• 在某一位置插入元素val
• 插入在一个迭代器区间中

注:由于set容器中元素具有唯一性,因此当插入重复元素时,只会插入一个。

2.删除元素

在这里插入图片描述

根据文档内容我们可以知道删除元素有一样也是有三种方式可以进行删除:
• 删除指定迭代器指向位置的元素
• 删除set容器中与val相等的值
• 删除区间[first,last)内的元素。

3.查找元素

在这里插入图片描述


在set容器中查找与val相等的第一个元素,如果找到则返回改元素对应的迭代器区间,否则则返回end的迭代器。

在这里插入图片描述

🎡三、multiset

multiset和set本质上没有太大的区别,主要区别就在于multiset支持值冗余,也就意味着元素是可以重复的。

此外,当在查找冗余数据时,multiset返回的是中序遍历中第一次出现的元素

在这里插入图片描述

🎄四、map类的使用

1. map类的介绍

map是C++中STL的一个关联式容器,它是以键值对来存储数据的,假设我们定义第一个称为关键字key,第二个称为关键字的值value,也就意味着每个关键字只能在map中出现一次。

map的底层存储数据的结构是用红黑树来实现的,也就说明在map内部中所有的数据都是有序的。

2. map的构造

在这里插入图片描述


根据文档内容我们知道map的构造有着三种方式,分别是:

1.无参默认构造

map<int,string> m;

2.迭代器构造

vector<pair<int, string>> ret ={{1,"one"},{2,"second"},{3,"third"}}; map<int, string>m(ret.begin(), ret.end());

3.拷贝构造

map<int, string> ret ={{1,"one"},{2,"second"},{3,"third"}}; map<int, string>copymap(ret);

3. map的迭代器

map容器提供的迭代器也是跟set一样有正向迭代器和反向迭代器,具体细节就不细讲了,可以看看set的。

map迭代器的使用示例:

正向迭代器:

在这里插入图片描述

反向迭代器:

在这里插入图片描述

4. map的operator[]

在这里插入图片描述


根据文档内容我们可以知道,当key存在时,我们就可以返回key所映射的value值的引用。

在这里插入图片描述

5. map的常用函数

map容器中也提供了一些函数负责元素插入、查找、删除等操作的函数,下面是有关map常用的一些函数:

1.插入元素

在这里插入图片描述


根据文档内容我们发现和set的插入很相似:

• 直接插入一个值val.
• 在某一位置插入元素val.
• 插入在一个迭代器[first,end)区间中.

2.删除元素

在这里插入图片描述

根据文档内容我们可以发现和set容器的删除相似:
• 删除指定迭代器指向位置的元素
• 删除map容器中与val相等的值
• 删除区间[first,last)内的元素。

3.查找元素

在这里插入图片描述


根据文档内容我们发现与set容器的查找相似,这我们就不过多赘述了。

在这里插入图片描述

🏠五、multimap

multimap与map类似,也是键值对的容器,不同之处在于它允许插入重复的键。

在这里插入图片描述

🚆六、总结

今天的分享就到这里啦,希望能帮助大家跟进一步了解set和map的有关知识以及内容。感谢大家的阅读!

Read more

Linux(一) | 初识Linux与目录管理基础命令掌握

Linux(一) | 初识Linux与目录管理基础命令掌握

个人主页-爱因斯晨 文章专栏-Linux 文章目录 * 个人主页-爱因斯晨 * 文章专栏-Linux * 一、前言 * 1.为什么学习Linux * 2.操作系统概述: * 3.常见的操作系统: * 二、初识Linux * 1.诞生 * 2.什么是Linux内核 * 3.常见的发行版(热门:centos,ubuntu) * 三、基础命令 * 1.目录结构 * 2. Linux命令入门 * 2.1 Linux命令基础 * 2.2 基础格式 * 2.3 开关机 * 2.4 目录操作 一、前言 1.为什么学习Linux 如果把操作系统分为两类: 个人桌面操作系统:windows,macos

By Ne0inhk
Flutter 组件 ansi_styles 的鸿蒙化适配实战 - 驾驭极致终端交互艺术、实现 OpenHarmony 开发链路、日志系统与控制台的工业级色彩分级方案

Flutter 组件 ansi_styles 的鸿蒙化适配实战 - 驾驭极致终端交互艺术、实现 OpenHarmony 开发链路、日志系统与控制台的工业级色彩分级方案

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 组件 ansi_styles 的鸿蒙化适配实战 - 驾驭极致终端交互艺术、实现 OpenHarmony 开发链路、日志系统与控制台的工业级色彩分级方案 前言 在鸿蒙(OpenHarmony)生态的底座开发、高性能服务端侧逻辑构建、或者是对命令行交互(CLI)有极其严苛要求的自动化工程流水线中。“终端日志的可视化分级与视觉重心引导维度”是衡量整个底层调试链路效能的最终质量门禁。面对包含数万行内核日志、海量网络请求报文、甚至是 0308 批次重型打包过程产生的满屏文字流。如果仅仅依靠终端中苍白的一串 White 和 Black 或者是毫无温标感的 txt 控制台。不仅会导致在定位历史回退(Regression)时让开发工程师如同在字符废墟中盲人摸象。更会因为缺乏大局观的报错优先级呈现。令技术高层在跨终端指挥调度时陷入严重的信息盲区。 我们需要一种“色彩生动、警示分明”的终端资产汇报艺术。 ansi_styles 是一套专注于无缝整合全球公认顶级

By Ne0inhk

Flutter 组件 metalink 的适配 鸿蒙Harmony 深度进阶 - 驾驭节点负载热力均衡、实现鸿蒙端跨域传输安全 (TLS) 与 HAP 原子化精准推送方案

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 组件 metalink 的适配 鸿蒙Harmony 深度进阶 - 驾驭节点负载热力均衡、实现鸿蒙端跨域传输安全 (TLS) 与 HAP 原子化精准推送方案 前言 在前两篇关于 metalink 的探讨中,我们分别攻克了基础协议解析与分片哈希审计。但在真正的“全球级应用市场下发”、“千万级 IoT 设备固件同步”或“金融级高频交易元数据对齐”场景中。简单的下载加速与校验仅仅是冰山一角。面对需要在数十个 CDN 节点间进行实时的负载热力均衡(Load Balancing);面对需要在复杂的公共网络环境中实现传输链路的强制 TLS 加密审计;面对需要在鸿蒙(OpenHarmony)端实现针对超大规模 HAP 包的“原子化(Atomic)”零冗余精准推送。 如果我们缺乏一套宏观的节点调度逻辑与严密的传输加密协议防护,不仅会产生严重的网络资源浪费。

By Ne0inhk
Flutter 三方库 system_settings 的鸿蒙化适配指南 - 实现应用内直达系统深度配置、支持通知权限、显示、声音与开发者选项一键跳转

Flutter 三方库 system_settings 的鸿蒙化适配指南 - 实现应用内直达系统深度配置、支持通知权限、显示、声音与开发者选项一键跳转

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 三方库 system_settings 的鸿蒙化适配指南 - 实现应用内直达系统深度配置、支持通知权限、显示、声音与开发者选项一键跳转 前言 在进行 Flutter for OpenHarmony 的精细化应用开发中,引导用户去开启必要的系统权限(如允许通知、修改屏幕自动旋转)是保障应用功能完整性的重要环。system_settings 是一个专注于将复杂的系统跳转 URI 语义化的库。它能让你的代码更具可读性,快速触达鸿蒙系统的各类深度设置页面。本文将指导大家如何在鸿蒙真机上实现高效率的跳转逻辑。 一、原理解析 / 概念介绍 1.1 基础原理 system_settings 的核心是利用鸿蒙系统的 Want 启动机制。它预置了大量标准化的设置页面标识符,通过简单的 MethodChannel 调用,请求鸿蒙的 AbilityContext

By Ne0inhk