STL之set

set

类型:集合,内部有序且不含重复元素
头文件:#include<set>
定义:set<typename> name; (如set<int> a)

访问

只能通过迭代器(iterator)访问

set<typename>::iterator it;

#include<cstdio>
#include<set>
using namespace std;

int main(){
	set<int> st;
	st.insert(3);
	st.insert(5);
	//注意,不支持it < st.end()的写法
	for(set<int>::iterator it = st.begin(); it != st.end(); it++){  //遍历vector
		printf("%d ", *it);
	}
	return 0}

注:set不可使用st.begin()+3这种迭代器加数字的写法。set内元素自动递增排序,且自动除去重复元素。

函数

  1. find(value):返回set中对应值为value的地址,未找到时返回st.end(),时间复杂度 O ( l o g n ) O(logn) O(logn)
  2. size():获取set中元素个数,时间复杂度 O ( 1 ) O(1) O(1)
  3. clear():清空set中元素,时间复杂度 O ( n ) O(n) O(n)
  4. insert(x):将x插入set中,时间复杂度 O ( l o g n ) O(logn) O(logn)
  5. erase()erase(it),删除指定单个元素,时间复杂度 O ( 1 ) O(1) O(1)erase(value),删除值为value的数,时间复杂度 O ( l o g n ) O(logn) O(logn)erase(first, last),删除区间左闭右开[first, last)的所有元素;时间复杂度 O ( l a s t − f i r s t ) O(last-first) O(lastfirst)
  6. begin():获得set首元素地址。
  7. end():获得set尾元素地址的下一位
  8. empty():判空。

用途

  最主要的作用在于自动去重并按升序排序
  延伸:set中元素是唯一的,如果需要处理不唯一的情况,则可使用multiset。另外,C++11标准中增加了unordered_set,以散列代替set内部的红黑树实现,使其可以用来处理只去重但不排序的要求,速度远高于set。
延伸内容待更新

参考资料

[1]. 《算法笔记》P197-202

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

D-A-X

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

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

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

打赏作者

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

抵扣说明:

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

余额充值