set(集合),是一个内部自动有序且不含重复元素的容器。
使用set的前提
#include <set>
using namespace std;
1 set的定义
set<typename> name;
//与vector类似,下面是一些例子
set<int> name;
set<double> name;
set<char> name;
set<node> name; //结构体
//set数组
set<typename> Arrayname[arraySize];
//例如 set<int> a[100];
2 set容器内元素的访问
//set只能通过迭代器访问
set<typename>::iterator it;
//例子
set<int>::iterator it;
set<char>::iterator it;
//通过*it访问set里的元素,注意:只有vector与string支持*(it+i)
for(set<int>::iterator it=st.begin();it!=st.end();it++){
printf("%d ",*it);
}
3 set常用函数实例解析
//1. insert() 将x插入set,自动排序和去重
st.insert(x);
//2. find() 返回值为value的迭代器
st.find(value);
set<int>::iterator it = st.find(2); //例子,在set中查找2,返回其迭代器
//3. erase() 2种用法
//3.1 删除单个元素,可以结合find()来用
st.erase(it); //it为迭代器
st.erase(st.find(200)); //利用find()找到100,然后用erase删除它
///
st.srase(value); //value为所需要删除元素的值
st.erase(100); //删除set中值为100的元素
//3.2 删除一个区间内的所有元素
st.erase(first,last); //[first,last)
//例子
set<int>::iterator it = st.find(30);
st.erase(it,st.end()); //删除元素30至set末尾之间的元素
//4. size() 获得元素的个数
st.size();
//5. clear() 清空set元素
st.clear();
4 set的常见用途
主要作用:自动去重并升序排序
- multiset 处理不唯一的情况
- unorder_set 以散列代替set内部的红黑树实现,适合只去重但不排序