이 글에서는 C++ STL에서 multiset::begin() 함수와 multiset::end() 함수의 동작 방식, 문법, 그리고 실제 사용 예제를 자세히 살펴보겠습니다.
C++ STL에서 multiset이란?
multiset은 set 컨테이너와 유사한 컨테이너입니다. set처럼 값을 키(key) 형태로 저장하며, 특정한 순서를 유지합니다.
multiset에서도 값은 set과 마찬가지로 키로 식별됩니다. 그러나 multiset과 set의 핵심적인 차이점은 다음과 같습니다. set은 중복되지 않는 고유한 키만 허용하는 반면, multiset은 동일한 키 값을 여러 개 저장할 수 있습니다.
multiset의 키는 내부적으로 이진 탐색 트리(binary search tree)를 구현하는 데 활용됩니다.
multiset::begin()이란?
multiset::begin() 함수는 C++ STL에 내장된 함수로, <set> 헤더 파일에 정의되어 있습니다.
이 함수는 multiset 컨테이너의 첫 번째 요소를 가리키는 반복자(iterator)를 반환합니다.
multiset 컨테이너는 값을 오름차순으로 저장하기 때문에, begin()이 가리키는 요소는 정렬 기준에 따른 컨테이너의 첫 번째 요소입니다.
문법
ms_name.begin();
매개변수
이 함수는 매개변수를 받지 않습니다.
반환값
해당 multiset 컨테이너의 첫 번째 요소를 가리키는 반복자를 반환합니다.
예제
Input: std::multiset<int> mymultiset = {1, 2, 2, 3, 4};
mymultiset.begin();
Output: 1실전 코드 예제
#include <bits/stdc++.h>
using namespace std;
int main() {
int arr[] = {2, 4, 1, 3, 8, 5, 6};
multiset<int> check(arr, arr + 7);
cout<<"List is : ";
for (auto i = check.begin(); i != check.end(); i++)
cout << *i << " ";
cout<<"\nStarting Element is : "<<*(check.begin());
return 0;
}실행 결과
위 코드를 실행하면 다음과 같은 출력이 생성됩니다.
List is : 1 2 3 4 5 6 8 Starting Element is : 1
multiset::end()란?
multiset::end() 함수 역시 C++ STL에 내장된 함수로, <set> 헤더 파일에 정의되어 있습니다.
이 함수는 multiset 컨테이너에서 마지막 요소 다음 위치(past-the-end)를 가리키는 반복자를 반환합니다.
여기서 'past-the-end'는 multiset 컨테이너의 마지막 요소 바로 뒤에 오는 위치를 의미합니다. 즉, 이 반복자는 컨테이너의 어떤 특정 요소도 가리키지 않습니다. 따라서 end()는 일반적으로 begin()과 함께 사용되어 multiset 컨테이너 전체의 범위(range)를 지정하는 용도로 활용됩니다.
문법
ms_name.end();
매개변수
이 함수는 매개변수를 받지 않습니다.
반환값
해당 multiset 컨테이너의 마지막 요소 다음 위치를 가리키는 반복자를 반환합니다.
예제
Input: std::multiset<int> mymultiset = {1, 2, 2, 3, 4};
for( std::multiset<int>::iterator it=mymultiset.begin(); it!=mymultiset.end(); ++it )
Output: 1 2 2 3 4실전 코드 예제
#include <bits/stdc++.h>
using namespace std;
int main() {
int arr[] = {2, 4, 1, 3, 8, 5, 6};
multiset<int> check(arr, arr + 7);
cout<<"List is : ";
for (auto i = check.begin(); i != check.end(); i++)
cout << *i << " ";
return 0;
}실행 결과
위 코드를 실행하면 다음과 같은 출력이 생성됩니다.
List is : 1 2 3 4 5 6 8
정리
multiset::begin()은 컨테이너의 첫 번째 요소를 가리키고, multiset::end()는 마지막 요소 다음 위치를 가리킵니다. 두 함수는 매개변수 없이 호출되며, 주로 begin()부터 end()까지의 범위를 순회하는 방식으로 multiset의 모든 요소에 접근할 때 함께 사용됩니다. 중복 값을 허용하는 multiset의 특성을 활용하려면 이 두 반복자 함수의 동작을 정확히 이해하는 것이 중요합니다.