前言
set是STL中的一种关联容器。集合具有无序性,互异性等特点。熟练使用STL中的set模板类,可以比较简单的解决一些编程问题。
关联容器:元素按照关键字来保存和访问,STL中的map,set就是关联容器
顺序容器:元素按照在容器中的位置顺序保存和访问
在使用set模板类前,请添加头文件 #include <set>
基本操作
int size(); 返回集合中元素的个数
iterator insert(T ); 向集合中插入一个元素
iterator begin(); 返回指向当前集合中第一个元素的迭代器
iterator end(); 返回指向当前集合中最后个元素的迭代器
求交集,并集,差集,对称差集
要使用上述算法,请添加头文件 #include <algorithm>
交集
template<class _InIt1, class _InIt2, class _OutIt>
_OutIt set_intersection(_InIt1 _First1, _InIt1 _Last1,_InIt2 _First2, _InIt2 _Last2, _OutIt _Dest);
形参含义
_First1 , _Last1 集合a的头尾迭代器
_First1 , _Last2 集合b的头尾迭代器
_Dest 储存运算结果容器的头迭代器
返回值
返回储存结果容器的最后一个元素的下一个迭代器
int first[] = { 5,10,15,20,25 }; int second[] = { 50,40,30,20,10 }; set<int> a(first, first + 5); set<int> b(second, second + 5); std::vector<int> v(10);// 0 0 0 0 0 0 0 0 0 0 std::vector<int>::iterator it; it = set_intersection(a.begin(), a.end(), b.begin(), b.end(), v.begin()); //10 20 0 0 0 0 0 0 0 0 //it 指向第三个元素 v.resize(it - v.begin());// 10 20
并集
template<class _InIt1, class _InIt2, class _OutIt> inline
_OutIt set_union(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2, _InIt2 _Last2, _OutIt _Dest);
差集
template<class _InIt1,class _InIt2,class _OutIt>
_OutIt set_difference(_InIt1 _First1, _InIt1 _Last1,_InIt2 _First2, _InIt2 _Last2,_OutIt _Dest);
对称差集
template<class _InIt1,class _InIt2,class _OutIt>
_OutIt set_symmetric_difference(_InIt1 _First1, _InIt1 _Last1,_InIt2 _First2, _InIt2 _Last2,_OutIt _Dest);