1. 程式人生 > >關於C++中使用set_union、set_intersection、set_difference的總結

關於C++中使用set_union、set_intersection、set_difference的總結

STL set中有set_union(取兩集合並集)、set_intersection(取兩集合交集)、set_difference(取兩集合差集)。1、這幾個函式的引數一樣。2、set_union(x1.begin(), x1.end(), x2.begin(), x2.end(), inserter(x, x.end())),前兩個引數是集合x1的頭尾,再依次是集合x2的頭尾,最後一個引數就是將集合x1和集合x2取合集後存入集合x中。
/*
Input:
     第一行輸入一個正整數T,表示測試次數;
     然後下面有2T行,每一行都有n+1個數字,其中第一個數字是n(0<=n<=100),表示該行後面還有n個數字輸入。 
Output: 
     對於每組測試資料,首先輸出測試資料序號,”Case #.NO”, 
     接下來輸出共5行,每行都是一個集合, 
     前2行分別輸出集合A、B,接下3行來分別輸出集合A、B的並(A u B)、交(A n B)、差(A – B)。 
     集合中的元素用“{}”擴起來,且元素之間用“,”隔開。 

Input:
     1
     1 2 3 1
     0
Output:
     Case# 1: 
     A = {1, 2, 3} 
     B = {} 
     A u B = {1, 2, 3} 
     A n B = {} 
     A - B = {1, 2, 3}
*/
#include<iostream>
#include<set>
#include<cstdio>
#include<algorithm>
using namespace std;

int main()
{
    set<int> x1;
    set<int> x2;
    set<int> C1;
    set<int> C2;
    set<int> C3;

    set<int>::iterator pos;
    int T,flag=0;
    cin >> T;
    while(T--)
    {
        flag++;
        int x1_i,x2_i,item;
        cin>>x1_i;
        for(int i = 0; i < x1_i; i++)
        {
            cin >> item;
            x1.insert(item);
        }
        cin >> x2_i;
        for(int i = 0; i < x2_i; i++)
        {
            cin >> item;
            x2.insert(item);
        }
        cout << "Case: " << flag <<endl;
        cout << "x1 = { ";
        for(pos = x1.begin(); pos != x1.end(); pos++)
        {
            if(pos != x1.begin()) cout << " ,";
            cout << *pos;
        }
        cout << " }" << endl << "x2 = { ";
        for(pos = x2.begin(); pos != x2.end(); pos++)
        {
            if(pos != x2.begin()) cout << " ,";
            cout << *pos;
        }
        cout<< " }" << endl << "x1 u x2 = { ";
        set_union(x1.begin(), x1.end(), x2.begin(), x2.end(), inserter(C1, C1.begin()));
        for(pos = C1.begin(); pos != C1.end(); pos++)
        {
            if(pos != C1.begin()) cout << " ,";
            cout << *pos;
        }
        cout<< " }" << endl << "x1 n x2 = { ";
        set_intersection(x1.begin(), x1.end(), x2.begin(), x2.end(), inserter(C2, C2.begin()));
        for(pos = C2.begin(); pos != C2.end(); pos++)
        {
            if(pos != C2.begin()) cout << " ,";
            cout << *pos;
        }
        cout<< " }" << endl << "x1 - x2 = {";
        set_difference(x1.begin(), x1.end(), x2.begin(), x2.end(), inserter(C3, C3.begin()));
        for(pos = C3.begin(); pos != C3.end(); pos++)
        {
            if(pos != C3.begin()) cout << " ,";
            cout << *pos;
        }
        cout << " }" << endl;
    }
    return 0;
}
輸出結果: