queue 优先队列的模板
//#include <queue>
//#include <cstdio>
//#include <algorithm>
//using namespace std;
//priority_queue < int,vector<int>,less<int> >q1;//降序
//priority_queue< int ,vector<int> ,greater<int> >q2;//升序
//priority_queue< int >q3;//降序
struct node
{
public:
int alpha,beta;
node( int x,int y){alpha=x;beta=y;}
void setx(int x){alpha=x;}
void sety(int y){beta=y;}
bool operator < ( const node &p) const
{
// return alpha==p.alpha?beta<p.beta:alpha>p.alpha;//小根堆,升序排列
return alpha==p.alpha?beta<p.beta:alpha<p.alpha;//大根堆,降序排列
}
};
//class node
//{
//
// public:
// int alpha,beta;
// node(){}
// node (int x ,int y):alpha(x),beta(y){}
// bool operator < ( const node &a) const {
// return alpha<a.alpha;
// }
//};
//
//int main()
//{
priority_queue < int, vector<int> ,less<int> >qa;//降序
priority_queue < int, vector<int> ,greater<int> >qb;//升序
priority_queue<int> qc;//降序
// priority_queue<node> q;
// q.push(node(1,1));
// q.push(node(2,2));
// q.push(node(3,3));
// while(!q.empty()){ //输出的方法
// printf("%d %d \n",q.top().alpha,q.top().beta);
// q.pop();
// }
//}
#include <set>
#include <cstdio>
#include <vector>
#include <string>
#include <iostream>
#include <algorithm>
#include <bits/stdc++.h>
using namespace std;
set<int, greater<int> > s1;//降序
set< int , less<int> > s2;//升序
set< int > s;//默认升序排列
set<int > ss;
set<int > result;
vector<int > v;
int main()
{
int n,m;
while(scanf("%d",&n)!=EOF)
s.insert(n);
while(scanf("%d",&m)!=EOF)
ss.insert(m);
// scanf("%d",&n);
// for(int i=0;i<n;i++)
// scanf("%d",v[i]);
// set<int> ::iterator it;
// for(it=s.begin();it!=s.end();it++)
printf("%d\n",*it);
// {
// printf("%d\n",*lower_bound(s.begin(),s.end(),5));
set_intersection(s.begin(),s.end(),ss.begin(),ss.end(),back_inserter(v));
set <int> ::iterator it;//交集
// for(int i=0;i<2;i++)
// printf("%d ",v[i]);
printf("交集:\n");
for(int n: v) printf("%d ",n);//*****神奇的用法
printf("\n");
v.clear();
printf("并集:\n");
set_union(s.begin(),s.end(),ss.begin(),ss.end(),back_inserter(v));
for(int n: v) printf("%d ",n);
printf("\n");
v.clear();
printf("差集(s-ss):\n");
set_difference(s.begin(),s.end(),ss.begin(),ss.end(),back_inserter(v));
for(int n : v) printf("%d ",n);
printf("\n");
v.clear();
printf("差集(ss-s):\n");
set_difference(ss.begin(),ss.end(),s.begin(),s.end(),back_inserter(v));
for(int n :v) printf("%d ",n);
}
//begin() 返回指向第一个元素的迭代器
//clear() 清除所有元素
//count() 返回某个值元素的个数
//empty() 如果集合为空,返回true(真)
//end() 返回指向最后一个元素之后的迭代器,不是最后一个元素
//equal_range() 返回集合中与给定值相等的上下限的两个迭代器
//erase() 删除集合中的元素
//find() 返回一个指向被查找到元素的迭代器
//get_allocator() 返回集合的分配器
//insert() 在集合中插入元素
//lower_bound() 返回指向大于(或等于)某值的第一个元素的迭代器
//key_comp() 返回一个用于元素间值比较的函数
//max_size() 返回集合能容纳的元素的最大限值
//rbegin() 返回指向集合中最后一个元素的反向迭代器
//rend() 返回指向集合中第一个元素的反向迭代器
//size() 集合中元素的数目
//swap() 交换两个集合变量
//upper_bound() 返回大于某个值元素的迭代器
//value_comp() 返回一个用于比较元素间的值的函数