#include<set>
using std::set;
set可以实现内部自动有序且不含重复元素的容器
1.set的定义
set<typename> name;
注意事项等同vector
2.set容器内元素的访问
不同于vector,set内元素只能通过迭代器访问,并且不支持迭代器加整数的行为,如(it+i)i为整数这种写法是不允许的
遍历方式只能是
for(set<int>::iterator it=si.begin();it!=si.end();it++)
cout<<*it<<endl;
注意:迭代器不支持it<si.end()写法
3.set常用函数解析
(1)insert()
insert(x)将x插入set容器中,并自动递增排序和去重,时间复杂度为O(logn),n为set中元素个数
(2)find()
find(value)返回对应值为value的迭代器,时间复杂度为O(logn),n为set中元素个数
set<int>::iterator it=set.find(3);//返回对应值为3的迭代器
(3)erase()
①si.erase(it),it为待删除元素的迭代器。时间复杂度为O(1),可结合find()使用
si.erase(si.find(200));//删除值为200的元素,erase为O(1),find为O(logn)
②si.erase(value),value为一个值。删除值value的元素,时间复杂度O(logn)
si.erase(200);//删除值为200的元素,时间复杂度O(logn)
③si.erase(first,last),删除[first,last)左闭右开区间的元素,时间复杂度O(last-first)
set<int>::iterator it=si.find(30);
si.erase(it,si.end());
(4)size()
时间复杂度O(1)
(5)clear()
时间复杂度O(n)
4.常见用途
自动去重并升序排序
如果需要使用不去重的情况,使用multiset
如果需要使用不排序的情况,使用unordered_set(速度远高于set)