C++ 합집합, 교집합, 차집합 STL

set_(union, inersection, difference)

STL내 합집합, 교집합, 차집합 함수를 사용해봅니다.


함수 기본 설명

모든 함수는 algorithm 헤더 안에 있습니다.

  • set_union : 합집합을 만듭니다.
  • set_intersection : 교집합을 만듭니다.
  • set_difference : 차집합을 만듭니다.

주의할점

공간이 필요합니다.

  • 만들어진 집합을 넣어둘 객체는 미리 공간이 확보 되어야 합니다.
  • 저의 경우 미리 1번 집합의 크기 2번 집합의 크기의 합을 구해 미리 공간을 확보해 놓고 사용했습니다.
  • 반환값이, 삽입이 끝난후의 끝 지점 iterator 입니다.
    • 이점을 이용하여 남는 공간은 erase 함수로 삭제해 주었습니다.

사용법

  • <함수>(`집합1`의 범위, `집합2`의 범위, `넣을 집합`의 시작지점)
  • Difference 의 경우 집합1 에서 집합2의 차집합을 구합니다.

코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61

#include<iostream>
#include<vector>
#include<algorithm>

using namespace std;


vector<int> vec1{ 1,2,3,4,5 };
vector<int> vec2{ 1,2,30,40,50 };

void Print_Vec(const vector<int> &vec) {
    for (const int &it : vec) {
        cout << it << " ";
    }
    cout << "\n";
}

void Union_Func(){
    cout << "Union_Func\n";
    vector<int> buff(vec1.size() + vec2.size());
    auto iter = set_union(vec1.begin(), vec1.end(), vec2.begin(), vec2.end(), buff.begin());
    buff.erase(iter, buff.end());

    Print_Vec(buff);
}

void Intersection_Func() {
    cout << "Intersection_Func\n";
    vector<int> buff(vec1.size() + vec2.size());
    auto iter = set_intersection(vec1.begin(), vec1.end(), vec2.begin(), vec2.end(), buff.begin());
    buff.erase(iter, buff.end());

    Print_Vec(buff);
}

void Difference_Func() {
    cout << "Defference_Func\n";

    vector<int> buff(vec1.size() + vec2.size());
    auto iter = set_difference(vec1.begin(), vec1.end(), vec2.begin(), vec2.end(), buff.begin());
    buff.erase(iter, buff.end());

    Print_Vec(buff);
}


int main()
{
    Print_Vec(vec1);
    Print_Vec(vec2);

    cout << "\n===========\n\n";

    Union_Func();
    Intersection_Func();
    Difference_Func();

    return 0;
}


결과

1
2
3
4
5
6
7
8
9
10
11
1 2 3 4 5
1 2 30 40 50

===========

Union_Func
1 2 3 4 5 30 40 50
Intersection_Func
1 2
Defference_Func
3 4 5

Reference

  • http://www.cplusplus.com/reference/algorithm/?kw=algorithm