关联容器Set
set和map一样属于关联容器,set是集合,map是映射。
set容器中的元素已经是有序的,一般是升序,可以根据自己的需要改变排序方式。
使用set
#include<set>
set<int> s;
s.insert(3);
set的集合功能:
两个有序集的并
set_union(s1.begin(),s1.end(),s2.begin(),s2.end(),inserter(s,s.begin()));
两个有序集的交
set_intersection(s1.begin(),s1.end(),s2.begin(),s2.end(),inserter(s,s.begin()));
两个有序集的差
set_difference (s1.begin(),s1.end(),s2.begin(),s2.end(),inserter(s,s.begin()));
求两个集合的并、交和差集
输入
5
3 2 1 5 4
5
5 8 7 6 4
输出
1 2 3 4 5 6 7 8
4 5
1 2 3
程序代码:
#include<iostream>
#include<fstream>
#include<set>
#include<algorithm>
#include<iterator>
using namespace std;
void main()
{
//定义set对象
set<int> s1;
set<int> s2;
set<int> s;
int number,input;
ifstream stream("input.txt");
stream>>number;
for(int j=1;j<=number;j++)
{
stream>>input;
s1.insert(input);
}
stream>>number;
for(int k=1;k<=number;k++)
{
stream>>input;
s2.insert(input);
}
//往set对象中插入数据
//合并两个集合
for(int f=1;f<=3;f++)
{
switch(f)
{
case 1:
set_union(s1.begin(),s1.end(),s2.begin(),s2.end(),inserter(s,s.begin()));
break;
case 2:
set_intersection(s1.begin(),s1.end(),s2.begin(),s2.end(),inserter(s,s.begin()));
break;
case 3:
set_difference(s1.begin(),s1.end(),s2.begin(),s2.end(),inserter(s,s.begin()));
break;
default: break;
}
//定义set对象的迭代器
set<int>::iterator p;
p=s.begin();
for (int g=0;g<s.size();g++)
{
cout << *p <<" ";
p++;
}
cout<<endl;
s.clear();
}
}