이 튜토리얼에서는 C++의 STL 라이브러리를 사용하여 주어진 두 개의 벡터(vector)를 하나로 결합하는 방법을 알아보겠습니다.
두 벡터를 결합할 때는 STL에서 제공하는 set_union() 메서드를 활용합니다. 이 함수는 두 개의 정렬된 범위를 받아 합집합을 구하는 방식으로 동작하기 때문에, 호출 전에 반드시 각 벡터가 오름차순으로 정렬되어 있어야 한다는 점에 유의해야 합니다.
예제 코드
#include <bits/stdc++.h>
using namespace std;
int main(){
// 두 개의 벡터 선언
vector<int> vector1 = { 1, 45, 54, 71, 76, 12 };
vector<int> vector2 = { 1, 7, 5, 4, 6, 12 };
sort(vector1.begin(), vector1.end());
sort(vector2.begin(), vector2.end());
cout << "First Vector: ";
for (int i = 0; i < vector1.size(); i++)
cout << vector1[i] << " ";
cout << endl;
cout << "Second Vector: ";
for (int i = 0; i < vector2.size(); i++)
cout << vector2[i] << " ";
cout << endl;
// 결과를 저장할 벡터 생성
vector<int> v(vector1.size() + vector2.size());
vector<int>::iterator it, st;
it = set_union(vector1.begin(),vector1.end(),vector2.begin(), vector2.end(), v.begin());
cout << "\nAfter joining:\n";
for (st = v.begin(); st != it; ++st)
cout << *st << ", ";
cout << '\n';
return 0;
}실행 결과
First Vector: 1 12 45 54 71 76 Second Vector: 1 4 5 6 7 12 After joining: 1, 4, 5, 6, 7, 12, 45, 54, 71, 76,
코드 설명
위 코드의 동작 과정을 단계별로 살펴보면 다음과 같습니다.
1. 정렬 수행: set_union()은 정렬된 입력을 전제로 동작하므로, sort() 함수로 두 벡터를 먼저 오름차순 정렬합니다.
2. 결과 벡터 준비: 두 벡터 크기의 합만큼 미리 공간을 확보한 새로운 벡터 v를 생성합니다. 합집합의 최대 크기는 두 벡터 크기의 합이므로 충분한 크기입니다.
3. set_union() 호출: 함수는 두 범위의 합집합을 v.begin() 위치부터 기록하고, 마지막으로 쓰인 요소의 다음 위치를 가리키는 반복자(iterator)를 반환합니다. 중복된 요소는 한 번만 저장됩니다.
4. 출력: 반환된 반복자까지 순회하며 결합된 결과를 화면에 출력합니다. 반환값을 활용하면 결과 벡터의 실제 유효 길이만큼만 정확하게 출력할 수 있습니다.
참고 사항
단순히 모든 요소를 중복 포함하여 이어 붙이고 싶다면 set_union() 대신 insert()와 back_inserter를 조합하거나, C++23부터는 ranges::set_union 등의 범위 기반 API도 활용할 수 있습니다. 또한 set_union()은 집합 연산이므로 중복 제거가 필요한 경우에 특히 유용합니다.