TOJ 1743集合运算(set集合并交差的运用)

Posted Kannyi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TOJ 1743集合运算(set集合并交差的运用)相关的知识,希望对你有一定的参考价值。

Description
给定两个集合A和B的所有元素,计算它们的交、并、差集。
Input
输入数据有多组,第一行为数据的组数T,接下来有2T行,每组数据占2行,每行有若干个整数,第一行的所有整数构成集合A,第二行的所有整数构成集合B,分别用空格分隔。A和B最多分别不超过100个元素。
Output
输出A、B的交、并、差集中的所有元素(以递增顺序)。每个集合占一行,数据元素之间用空格分隔。
Sample Input 

1
0 1 2 3 4 5 6 7 8 8
3 6 8 9

Sample Output

3 6 8
0 1 2 3 4 5 6 7 8 9
0 1 2 4 5 7

#include<set>
#include<algorithm>
#include<iterator> 
#include<iostream>
#include<sstream>
using namespace std;
int main()
{
    set<int>v1,v2,v3;
    string s1,s2;
    int i,j,t,a;
    set<int>::iterator it;
    cin>>t;
    getchar();
    while(t--)
    {
        j=0;
        getline(cin,s1);           //数字类型的字符串导入s1
        stringstream ss1(s1);      //字符串s1再导入ss1流中
        while(ss1>>a)              //流中的字符串s1导入int a中变成数字
        {
            v1.insert(a);          //将a中暂时保存的数字转入set
        }
        getline(cin,s2);
        stringstream ss2(s2);
        while(ss2>>a)
        {
            v2.insert(a);
        }
        set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),inserter(v3,v3.begin()));
// for(it=v3.begin();it!=v3.end();it++) { if(j==0) { cout<<*it; j=1; } else cout<<" "<<*it; } cout<<endl; v3.clear(); //清空v3集合 set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),inserter(v3,v3.begin()));
// j=0; for(it=v3.begin();it!=v3.end();it++) { if(j==0) { cout<<*it; j=1; } else cout<<" "<<*it; } cout<<endl; v3.clear(); set_difference(v1.begin(),v1.end(),v2.begin(),v2.end(),inserter(v3,v3.begin()));
// j=0; for(it=v3.begin();it!=v3.end();it++) { if(j==0) { cout<<*it; j=1; } else cout<<" "<<*it; } cout<<endl; v3.clear(); v1.clear(); //清空v1集合 v2.clear(); //清空v2集合 } return 0; }

 

以上是关于TOJ 1743集合运算(set集合并交差的运用)的主要内容,如果未能解决你的问题,请参考以下文章

集合的并交差运算

集合的并交差对称差运算

009 set

集合相关操作函数

[java] 求2个集合的交 差 并集

Python 基础之集合相关操作与函数和字典相关函数