C++ STL set의 operator= 연산자란?
C++ STL에서 operator= 함수는 하나의 set을 다른 set에 복사(copy)하거나 이동(move)시키는 데 사용됩니다. 일반적인 '=' 대입 연산자와 동일한 방식으로 동작하며, 총 세 가지 오버로드된 형태가 제공됩니다.
1. 복사(Copy) 형태
set& operator= (const set& s1)
이 함수는 set s1의 모든 요소를 대상 set에 복사합니다. 매개변수로는 동일한 타입의 set이 전달됩니다.
사용 예: set s1 = s2;
2. 이동(Move) 형태
set& operator= (set&& s1)
이 함수는 set s1의 요소들을 호출한 set으로 이동시킵니다. 불필요한 복사 오버헤드 없이 효율적으로 데이터를 전달할 수 있어 성능 면에서 유리합니다.
3. 초기화 리스트(Initializer List) 형태
set& operator= (initializer_list<value_type> ilist)
이 버전은 초기화 리스트 ilist의 값들을 호출한 set에 복사합니다.
사용 예: set<int> s1 = { 1, 2, 3, 4, 5 };
참고: 위 세 가지 형태 모두 set<T> 타입의 this 포인터에 대한 참조를 반환합니다.
예제 코드
다음 프로그램은 C++에서 set의 operator= 연산자를 실제로 사용하는 방법을 보여줍니다.
#include <iostream>
#include <set>
using namespace std;
int main(){
set<int> set1, set2;
// 리스트 초기화
set1 = { 1, 2, 3, 4, 5 };
set2 = { 10, 11, 12, 13 };
// 복사 전 상태 출력
cout << "set1 :";
for (auto s = set1.begin(); s != set1.end(); ++s) {
cout << *s << " ";
}
cout << endl;
cout << "set2 :";
for (auto s = set2.begin(); s != set2.end(); ++s) {
cout << *s << " ";
}
// set2를 set1로 복사한 후 출력
cout << endl << "After Copy" << endl;
cout << "set1 :";
set1 = set2;
for (auto s = set1.begin(); s != set1.end(); ++s) {
cout << *s << " ";
}
return 0;
}실행 결과
set1 :1 2 3 4 5 set2 :10 11 12 13 After Copy set1 :10 11 12 13
결과 분석
먼저 초기화 리스트 형태의 operator=를 사용해 set1과 set2에 각각 값을 할당했습니다. 이후 set1 = set2; 문장으로 복사 형태의 operator=가 호출되면, set1의 기존 내용({1, 2, 3, 4, 5})은 사라지고 set2의 내용({10, 11, 12, 13})으로 완전히 대체됩니다. 즉, set의 대입 연산은 기존 요소를 모두 제거하고 새로운 요소로 교체하는 방식으로 동작한다는 점을 확인할 수 있습니다.