이 글에서는 C++ STL의 set::value_comp() 함수에 대해 구문, 동작 방식, 반환값을 중심으로 자세히 알아보겠습니다.
C++ STL에서 set란?
C++ STL의 set은 고유한(unique) 요소들을 특정 정렬 순서에 따라 저장하는 컨테이너입니다. set에서는 요소의 값이 곧 해당 요소를 식별하는 키 역할을 하기 때문에, 모든 요소는 반드시 유일해야 합니다. 한 번 set에 추가된 값은 나중에 수정할 수 없지만, 요소를 삭제하거나 새로 추가하는 것은 언제든 가능합니다. 내부적으로 set은 이진 탐색 트리(binary search tree) 구조로 구현됩니다.
set::value_comp()란 무엇인가?
value_comp()는 C++ STL에 내장된 함수로, <set> 헤더 파일에 선언되어 있습니다. 이 함수는 set 컨테이너가 요소 간 비교에 사용하는 비교 객체(comparison object)의 복사본을 반환합니다. 기본적으로 이 객체는 '미만(less than)' 연산자 객체입니다.
비교 객체는 함수 포인터 또는 함수 객체(function object) 형태로, 같은 타입의 두 값을 비교하여 첫 번째 요소가 두 번째 요소보다 작으면 true를, 그렇지 않으면 false를 반환합니다. set 컨테이너에서는 값(value)이 곧 키(key)이므로 요소들이 항상 정렬된 상태로 저장되며, 따라서 value_comp()와 key_comp()는 동일한 방식으로 동작합니다.
구문
comparison_object set_name.value_comp();
매개변수
이 함수는 어떤 매개변수도 받지 않습니다.
반환값
해당 set 컨테이너와 연관된 비교 객체를 반환합니다.
예제
입력/출력 예시
Input: set<int> myset = {9, 8, 7, 6, 5};
set<int>::value_compare cmp = myset.value_comp()
Output: 5 6 7 8 9전체 코드 예제
#include <bits/stdc++.h>
using namespace std;
int main(){
set<int> Set;
set<int>::value_compare cmp = Set.value_comp();
for (int i = 0; i <= 10; i++)
Set.insert(i);
cout<<"elements in set are: ";
int front = *Set.rbegin();
set<int>::iterator i = Set.begin();
do {
std::cout << *i << " ";
}
while (cmp(*(++i), front));
std::cout << '\n';
return 0;
}
실행 결과
위 코드를 실행하면 다음과 같은 출력이 생성됩니다.
elements in set are : 0 1 2 3 4 5 6 7 8 9
이 예제에서 cmp는 set의 비교 객체로, 다음 요소가 마지막 요소보다 작은 동안 계속 반복하며 요소를 출력합니다. set은 항상 오름차순으로 정렬되어 있으므로, value_comp()를 활용하면 정렬 순서를 기준으로 한 순회 로직을 손쉽게 작성할 수 있습니다.