STL中的关联式容器——set(集合)

STL中的关联式容器——set(集合)

  set,即“集合”。set是关联容器的一种,具体实现采用了红黑树的平衡二叉树的数据结构。由于采用了红黑树(Red-Black Tree)的平衡二叉检索树的数据结构,在插入元素时, 它会自动调整二叉树的排列,把该元素放到适当的位置,以确保每个子树根节点的键值大于左子树的所有节点的键值,而小于右子树所有节点的键值;另外,还得确保根节点左子树的高度与右子树的高度相等,这样,二叉树的高度最小,从而检索速度最快。要注意的是,它不会重复插入相同键值的元素,而采取忽略处理。
  平衡二叉检索树的检索使用中序遍历算法,检索效率高于vector, deque和list等容器。另外,采用中序遍历算法可将键值由小到大遍历出来,所以,可以理解为平衡二叉检索树在插入元素时,就会自动将元素按键值由小到大的顺序排列。
&nmsp;&nmsp;对于set容器中的键值,不可直接去修改。因为如果把容器中的一个键值修改了,set容器会根据新的键值旋转子树,以保持新的平衡,这样,修改的键值很可能就不在原先那个位置上了,换句话来说,构造set集合的主要目的就是为了快速检索。
  set是C++ STL的一个重要成员,使用它时需要包含头文件:

#include <set>; //包含了set和multiset两种容器的定义

一、set 的初始化

有以下方式,举例说明如下:

set<int> a;
set<int> b(a); //拷贝队列a给队列b

二、set 对象的重要操作

列举如下:

a.insert(); //在集合中插入元素
a.erase(); //删除集合中的元素
a.clear(); //清除所有元素
a.max_size(); //返回集合能容纳的元素的最大限值
a.size(); //集合中元素的数目
a.count(); //返回某个值元素的个数
a.find(); //返回一个指向被查找到元素的迭代器
a.empty(); //如果集合为空,返回true
a.swap(); //交换两个集合变量

三、优先级的设定

可以有以下几种方式,列举如下:

struct cmp1
{
    bool operator ()(const int &a,const int &b)
    {
       return a>b;//最大值优先
   	}
};
struct cmp2
{
	bool operator ()(const int &a,const int &b)
	{
	    return a<b;//最小值优先
	}
};
struct node1
{
	int u;
	bool operator < (const node1 &a) const
	{
		return u>a.u;//最大值优先
	}
};
struct node2
{
	int u;
	bool operator < (const node2 &a) const
	{
		return u<a.u;//最小值优先
	}
};
set<int>q1;//采用默认优先级构造队列,最小值优先
set<int,cmp1>q2;//最大值优先 
set<int,cmp2>q3;//最小值优先
set<int,greater<int> >q4;//最大值优先
//注意“>>”会被认为错误,因为这是右移运算符,所以这里用空格号隔开
set<int,less<int> >q5;//最小值优先
set<node1>q6;//最大值优先
set<node2>q7;//最小值优先
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

使君杭千秋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值