头文件
#include <iostream>
#include <set>
using namespace std;
定义
set <int> s;
注意:
- 有序性。 set容器中的元素默认升序排序;
- 重复性。 set容器中没有重复的元素。
常见用法
1.迭代器
s.begin(); //返回指向容器头部的迭代器
s.end(); //返回指向容器尾部的迭代器
s.rbegin(); //等价于s.end()
s.rend(); //等价于s.begin()
2.插入操作
插入格式:
s.insert(i); //直接向容器中添加i元素
s.insert(first,second);//插入区间(first,second)的中的元素
该区间为左闭右开区间
#include <iostream>
#include <set>
using namespace std;
int main()
{
set <int> s1;
set <int> s2;
for(int i=0;i<=5;i++)
s1.insert(i);
for(int j=6;j<=10;j++)
s2.insert(j);
set<int>::iterator first=s2.begin();
set<int>::iterator second=s2.begin();
second++;
second++;
s1.insert(11);
for(set<int>::iterator iter=s1.begin();iter!=s1.end();iter++)
cout<<(*iter)<<' ';
cout<<endl;
//运算结果:0 1 2 3 4 5 11
s1.insert(first,second);
for(set<int>::iterator iter=s1.begin();iter!=s1.end();iter++)
cout<<(*iter)<<' ';
//运算结果:0 1 2 3 4 5 6 7 11
return 0;
}
以上代码的运算结果如下:
3.删除操作
格式:
s.erase(i);//删除元素i
s.erase(pos);//删除位置为pos的元素
s.erase(s.begin(),s.end());//删除所有元素。等价于s.clear()。
#include <iostream>
#include <set>
using namespace std;
int main()
{
int a[] = {1,2,3,4,5};
set <int> s (a,a+5);//数组a中的元素全部赋给s
s.erase(3);//第一种删除方式,删除元素3
for(set <int> ::iterator it = s.begin();it != s.end();it++)
{
cout<<(*it)<<' ';
}
cout<<endl;
//运算结果:1 2 4 5
s.erase(s.begin());//第二种删除方式,删除第一个元素
for(set <int> ::iterator it = s.begin();it != s.end();it++)
{
cout<<(*it)<<' ';
}
cout<<endl;
//运算结果:2 4 5
s.erase(s.begin(),s.end());//第三种删除方式,删除所有元素
if(s.empty())
cout<<"set为空!!!";
//运算结果:set为空!!!
return 0;
}
以上代码运行结果如下:
4.其他常见函数
s.size(); //返回当前容器中的元素个数
s.max_size(); //返回set容器的最大容量
s.count(); //判断某元素的出现次数。因为在set中没有重复出现的元素,所以该函数只判断该元素是否存在
s.swap(); //交换两个set容器中的所有元素
#include <iostream>
#include <set>
using namespace std;
int main()
{
set <int> s1;
set <int> s2;
for(int i = 0;i<=5;i++)
{
s1.insert(i);
}
for(int j = 4;j<=8;j++)
{
s2.insert(j);
}
cout<<s1.size()<<endl;//运算结果:6
cout<<s1.max_size()<<endl;
s1.swap(s2);
set <int> ::iterator it=s1.begin();
while(it != s1.end())
{
cout<<(*it)<<' ';
it++;
}
//运算结果:4 5 6 7 8
return 0;
}
以上代码运行结果如下: