集合 set
-
元素默认自动由小到大排序
-
元素不重复
-
添加头文件
#include<set>
1.set容器的创建
#include<set>
#include<functional>
set<int> seta; //默认由小到大排序
set<int, greater<int> > setb; //默认降序排序,需包含头文件functional
2.元素输出
- 迭代器 iterator,类似指针。
- 代码模板
for(set<int>::iterator it=a.begin();it!=a.end();it++){
cout<<*it<<" ";
}
- 示例代码
#include <iostream>
#include<set>
#include<functional>
using namespace std;
int main()
{
set<int> a; //升序排序
set<int,greater<int> > b; //降序排序
for(int i=1;i<11;i++){
a.insert(i);
b.insert(i);
}
//输出
for(set<int>::iterator it=a.begin();it!=a.end();it++){
cout<<*it<<" ";
}
cout<<endl;
for(set<int>::iterator it=b.begin();it!=b.end();it++){
cout<<*it<<" ";
}
}
输出为:
1 2 3 4 5 6 7 8 9 10
10 9 8 7 6 5 4 3 2 1
Process returned 0 (0x0) execution time : 0.030 s
Press any key to continue.
3.set容器的常用函数
//返回set容器的第一个元素
s.begin()
//返回set容器的最后一个元素
s.end()
//删除set容器中的所有的元素
s.clear()
//判断set容器是否为空
s.empty()
//插入一个元素
s.insert()
//删除一个元素
s.erase()
//返回当前set容器中的元素个数
s.size()
//返回set容器可能包含的元素最大个数
s.max_size()
//元素 1出现的次数
s.count(1)
4.set容器的增删改查
- 插入 insert()
//插入单个元素
s.insert(1);
//插入区间元素
int a[4] = {1,2,3,4};
s.insert(a,a+4); //将区间[a, a+4]里的元素插入容器
- 删除 erase() 、 clear()
set<int>::iterator ita = s.begin();
set<int>::iterator itb = s.begin();
s.erase(ita); //删除一个元素
s.erase(ita,itb); //删除区间[ita,itb)的元素,不包括itb
erase(key_value); //删除键值key_value的值
s.clear() //删除set容器中的所有的元素
- 查找 find() - 返回的是定位器
//查找一个元素,如果容器中不存在该元素,返回值等于s.end()
s.find()
if(s.find(2) != s.end())
cout << "2 is existent" << endl;
else
cout << "2 is non-existent" << endl;
- 修改
set<int>::iterator it=a.begin();
*it++;
cout<<*it<<endl;
5.lower_bound() & upper_bound()
- 当创建set容器 默认升序排序时
lower_bound 大于等于
upper_bound 大于
#include<set>
set<int> a;
for(int i=1;i<11;i++){
a.insert(i);
}
cout<<*a.lower_bound(3); //返回第一个 ≥ 3 的定位器的取值
cout<<*a.upper_bound(3); //返回第一个 > 3 的定位器的取值
- 当创建set容器 降序排序时
lower_bound 小于等于
upper_bound 小于
#include<set>
#include<functional>
set<int,greater<int> > b;
for(int i=1;i<11;i++){
a.insert(i);
}
cout<<*a.lower_bound(3); //返回第一个 ≤ 3 的定位器的取值
cout<<*a.upper_bound(3); //返回第一个 < 3 的定位器的取值