Set容器
set作为一个容器也是用来存储同一数据类型的数据类型,并且能从一个数据集合中取出数据,在set 中每个元素的值都唯一,而且系统能根据元素的值自动进行排序。应该注意的是set 中数元素的值不能直接被改变。与stl的使用方法大致都相同。
1、set定义
set<类型> 对象名;
如:set<int> s;
2、添加元素
set<int> s;
s.insert(8);
s.insert(10);
s.insert(6);
s.insert(8); //重复元素不会插入
Set遍历
set的遍历也是使用迭代器进行遍历, 可以正序遍历也可以反序遍历.
1、正序遍历
set<int> s;
set<int>::iterator it;
for(it=s.begin();it!=s.end();it++)
cout << *it << endl;
2、反序遍历
1 set<int>::reverse_iterator it;
2 for(it=s.rbegin();it!=s.rend();it++)
3 cout << *it << endl
set常用操作
begin(), //返回set容器的第一个元素
end(), //返回set容器的最后一个元素
clear(), //删除set容器中的所有的元素
empty(), //判断set容器是否为空
max_size(), //返回set容器可能包含的元素最大个数
size(), //返回当前set容器中的元素个数
rbegin(), //返回的值和end()相同
rend(), //返回的值和rbegin()相同
erase(iterator), //删除定位器iterator指向的值
erase(first,second), //删除定位器first和second之间的值
erase(key_value), //删除键值key_value的值
find() , //返回给定值值得定位器,如果没找到则返回end()。
set中还有两个非常重要的函数,lower_bound()和upper_bound()。
这两个函数都需要传入一个值。
lower_bound返回的是大于或等于被查询元素的第一个元素位置的迭代器,
如果找不到,迭代器则为set.end() 。
upper_bound返回值则是>给定val的最小指针(iterator)。
例题:数字去重
#include <bits/stdc++.h>
using namespace std;
int main() {
set<int> s;
set<int>::iterator it;
int n, v;
cin >> n;
for(int i = 0; i < n; i++)
{
cin >> v;
s.insert(v);
}
for(it = s.begin(); it != s.end(); it++)
cout << *it << endl;
return 0;
}