Bootstrap

map和set

关联式容器

STL中容器一般可以分为两类,一类是以vector、list、deque等为代表的序列式容器,他的特点是其底层为线性序列的数据结构,里面存储的是元素本身。还有一种是关联式容器,他也是用来存储数据的,但是和序列式容器的区别在于它里面存放的是<key,value>结构的键值对,在进行数据检索的时候比序列式容器效率更高。STL中有两种不同结构的关联式容器:树型结构和哈希结构。这里介绍的是树型结构的关联式容器:map和set。这种容器的特点是使用平衡搜索树作为底层结构。下面来看一下他的具体实例以及应用。

set

set模板参数列表

在这里插入图片描述
从set模板定义中可以看到,set里面有3个模板参数,T代表存放元素的数据类型,set是一种key结构的搜索二叉树。Compare和STL中的优先级队列类似,是一种仿函数用来控制该二叉树的排序依据。Alloc则是set种元素空间的管理方式,使用STL提供的空间配置器

set的构造

在这里插入图片描述
在这里插入图片描述
set的构造和其他STL容器类似,都支持默认构造、拷贝构造以及赋值重载。在默认构造函数中,它可以进行构造空的set也可以用一段迭代器区间来构造set。

set的迭代器

在这里插入图片描述
set的迭代器和其他容器的迭代器几乎没有区别,begin用来返回起始位置元素的地址,end返回最后一个元素后面的地址,同时也支持反向迭代器等。

set容量操作

在这里插入图片描述
empty是用来判断set是否为空
size则是计算set中元素的个数

set增删查改

在这里插入图片描述
在这里插入图片描述
这里是对set进行增删查改操作,具体下面用代码演示具体使用:

void TestSet()
{
   
	set<int> st;
	int arr[] = {
    2,5,8,3,7,1,4,6 };
	for (auto e : arr)
	{
   
		st.insert(e);
	}
	for (auto& s : st)
	{
   
		cout << s << " ";
	}
	cout << endl;
	set<int>::iterator it = st.find(3);//查找key值,成功返回迭代器
	if (it != st.end())//需要判断是否越界
	{
   
		st.erase(it);//使用迭代器删除值
	}
	st.erase(4);//直接使用指定值删除key值
	for (auto& s : st)
	{
   
		cout << s << " ";
	}
	cout << endl;
}

;