【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.默认构造:

cpp 复制代码
set<int>  s;

2.迭代器构造:

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

3.初始化列表构造:

cpp 复制代码
set<int> s = {1,2,3,4};

4.拷贝构造:

cpp 复制代码
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.无参默认构造

cpp 复制代码
map<int,string> m;

2.迭代器构造

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

3.拷贝构造

cpp 复制代码
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的有关知识以及内容。感谢大家的阅读!

相关推荐
lbb 小魔仙几秒前
Python_多模态大模型实战指南
开发语言·python
XDHCOM16 分钟前
Python os.system() 和 subprocess 怎么选?运行系统命令哪个更好用?
开发语言·网络·python
hetao173383740 分钟前
2026-04-12~14 hetao1733837 的刷题记录
c++·算法
xixixi777771 小时前
AI自主挖洞 + 通信网络扩散:全域风险指数级放大,如何构建密码-沙箱-终端联动闭环?
开发语言·网络·人工智能·ai·大模型·php·通信
小碗羊肉1 小时前
【从零开始学Java | 第三十五篇】IO流-字节流
java·开发语言
智者知已应修善业1 小时前
【51单片机4位数循环小数位移数值位移】2023-6-9
c++·经验分享·笔记·算法·51单片机
csbysj20202 小时前
SOAP Fault 元素
开发语言
Soari2 小时前
Ziggo-CaaS-Switch软件配置: undefined reference to pthread_create
java·开发语言·fpga开发·tsn·zynq·交换机配置
wjs20242 小时前
jEasyUI 树形网格动态加载详解
开发语言
王璐WL2 小时前
【C++】string,vector和list对比
c++·list