【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

【毕业论文没思路?paperxm智能写作一键解决!】

【毕业论文没思路?paperxm智能写作一键解决!】

毕业论文写作困境的常见原因 缺乏明确的研究方向或选题,导致难以展开论文框架。文献综述不足,无法有效支撑论点,造成写作停滞。时间管理不当,临近截止日期时压力倍增。对学术写作规范不熟悉,格式和逻辑容易出错。 paperxm的链接我就给大家放着了哈:www.paperxm.com Paperxm智能写作工具的核心功能 基于自然语言处理技术,自动生成论文大纲和初稿,提供选题建议。内置文献检索模块,快速匹配相关学术资源,辅助文献综述。支持多语言写作,满足不同学科领域的表达需求。实时语法检查和格式修正,确保论文符合学术规范。 如何使用Paperxm 它从开题报告、文献综述、论文写作还有仿写、到最后的答辩PPT都能帮我直接解决! 优势一:节省时间 使用paperxm写论文,可以让我告别繁琐的资料搜集和整理工作。paperxm能迅速从海量资料中筛选出有用的信息,为我的论文提供有力支持。这样一来,你就有更多的时间去思考、创新,提高论文质量。 优势二:提高写作质量 paperxm具有强大的语言处理能力,可以帮助我优化句子结构、纠正语法错误,甚至提供写作建议。这意味着,我的论文在pape

By Ne0inhk

Flutter 三方库 performance_timer 的鸿蒙化适配指南 - 实现毫秒级性能剖析、支持嵌套计时与自动化性能报告输出

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 三方库 performance_timer 的鸿蒙化适配指南 - 实现毫秒级性能剖析、支持嵌套计时与自动化性能报告输出 前言 在 Flutter for OpenHarmony 的高性能调优过程中,准确识别应用中的卡顿点和耗时逻辑(Hotspots)是至关重要的。虽然可以使用鸿蒙的调试工具,但在代码层面实现轻量级的自动化性能监控往往更高效。performance_timer 是一个专为颗粒化性能评估设计的库,它能以极简洁的代码实现对业务链路的精准计时。本文将带领大家在鸿蒙端实战性能剖析。 一、原理解析 / 概念介绍 1.1 基础原理 performance_timer 封装了 Dart 的 Stopwatch,并引入了计分(Lap)和分组概念。它通过记录执行前后的纳秒级时间戳,计算差值并进行结构化汇总。 监控引擎 高精度时钟 API 时间差计算

By Ne0inhk
类和对象(上)

类和对象(上)

一、类的定义         类有点类似c语言的结构体是一种自定义类型,但类里面除了定义一些成员变量外还有方法(成员函数),在访问的时候要指定类域。         在类定义时首先用一个class关键字,在后面接着类的名字,然后使用{ }在花括号里面定义成员变量和成员函数,最后需要在花括号外加分号,如下: class Stack { void Init(int n = 4) { arr = (int*)malloc(sizeof(int) * n); if (nullptr == arr) { perror("malloc申请空间失败"); return; } capacity = n; size = 0; } //...... int* arr; size_t size; size_t capacity; }; 这里calss也可以替换成struct,在类里面的函数默认都为内联函数,当然它不一定都展开具体还取决于编译器。 二、访问限定符

By Ne0inhk
一篇了解Copilot pro使用的笔记

一篇了解Copilot pro使用的笔记

当前AI 程序员已经默许了,除了使用国内外的那些头部Chat。Agent 模态已经肆意发展,因为随着AI的加成,大家都越来越主动或被动“效率起飞”。下面聊一下Copilot Pro的使用吧。 使用这个也就几个月吧,不谈购买心酸史,已经直接官网10刀了。这次也算开始心疼了,先研究一下这到底怎么用才不暴殄天物也不小才大用吧。哈哈,为了那该死的性价比~ 1.关于copilot pro(个人账号)可供使用的头端模型界面 (手机没拍好) 看起来可用的后端模型挺多的,各家各路,选啥自己整。但却不是按照时间来计算,明显的“流量”限制,就是官网说的访问配额。 x = 相对消耗倍率(Cost / Compute Weight Multiplier),它不是速度,也不是性能评分,而是: “使用该模型一次,相当于基础模型消耗的多少倍额度”。 还有: (1)先说每个模型后面的那个数字0X 0x 不是 免费无限用 而是 不单独计入

By Ne0inhk