C++第十三讲:map && set

1.序列式容器和关联式容器

前面我们接触到的容器,如string、deque、vector等,它们都是按照元素的插入顺序来进行存储的,并不会对元素的顺序进行改变,元素的位置是固定的,数据元素之间存在一对一的线性关系,所以序列式容器的逻辑结构为线性序列的数据结构
而关联式容器,如我们要学习的map和set、unordered_map和unordered_set容器,元素是按照关键字(key)值的大小顺序进行一个存储和排列的,数据元素之间并不存在固定的一对一的关系,所以关联式容器的逻辑结构是非线性结构

2.set的使用

2.1set容器函数详解

在上一讲二叉搜索树中,我们最后讲到了key和key/value的使用场景,而set就是key使用场景的一个容器:

2.1.1set和multiset的区别

在这里插入图片描述

所以我们下面先看一下set:

2.1.2set的模板参数

在这里插入图片描述

set的底层实现为红黑树,增删查效率为logN

2.1.3构造函数

在这里插入图片描述

2.1.4迭代器和insert插入

insert:
在这里插入图片描述
迭代器:
迭代器的使用不再讲,要说的就是迭代器的begin位置是中序遍历的第一个位置

2.1.5count和find

在这里插入图片描述

2.1.6lower_bound、upper_bound和erase

在这里插入图片描述

2.1.7multiset和set的差异

1.multiset允许插入相同的值
2.multiset使用erase进行删除时,会将所有相同的元素都删除了:

int main()
{
   
	multiset<int> m1 = {
    4, 4, 4, 2, 1 };
	m1.erase(4);
	for (auto e : m1)
	{
   
		cout << e << " ";//1 2
	}
	cout << endl;

	return 0;
}

3.mulitiset对于find函数进行相同元素查找时,原理会有所不同:
multiset进行find查找时,查找的是中序遍历的第一个key:

int main()
{
   
	multiset<int> m1 = {
    4, 4, 4, 2, 1 };
	
	multiset<int>::iterator it = m1.find(4);
	while (it != m1.end())
	{
   
		cout << *it << " "
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值