이 글에서는 C++ STL에서 multimap::begin()과 multimap::end() 함수의 동작 원리, 문법, 그리고 실제 예제를 자세히 살펴봅니다.
C++ STL의 multimap이란?
multimap은 map 컨테이너와 유사한 연관 컨테이너(associative container)입니다. 키(key)와 매핑된 값(mapped value)의 조합으로 구성된 요소들을 특정 순서로 저장하며, map과 달리 동일한 키에 여러 개의 요소를 연결할 수 있습니다. 내부적으로 데이터는 항상 연관된 키를 기준으로 정렬되어 관리됩니다.
multimap::begin()이란?
multimap::begin()은 C++ STL에 내장된 함수로, <map> 헤더 파일에 정의되어 있습니다. begin()은 multimap 컨테이너의 가장 첫 번째 요소에 접근할 때 사용합니다.
이 함수는 컨테이너의 첫 번째 요소를 가리키는 반복자(iterator)를 반환합니다. 단, 컨테이너가 비어 있으면 반환된 반복자를 역참조(dereference)할 수 없습니다.
문법
multimap_name.begin();
매개변수
이 함수는 어떤 매개변수도 받지 않습니다.
반환 값
map 컨테이너의 첫 번째 값을 가리키는 반복자를 반환합니다.
입력
std::multimap<char, int> mymap;
mymap.insert({'a', 10});
mymap.insert({'b', 20});
mymap.insert({'c', 30});
mymap.begin();출력
a:10
예제: multimap::begin()
#include <bits/stdc++.h>
using namespace std;
int main(){
multimap<int, int> mul;
// multimap에 요소 삽입
mul.insert({ 1, 10 });
mul.insert({ 2, 20 });
mul.insert({ 3, 30 });
mul.insert({ 4, 40 });
mul.insert({ 5, 50 });
// multimap의 첫 번째 쌍(pair) 가져오기
auto i = mul.begin();
cout<<"First element in multimap is: ";
cout << "{" << i->first << ", " << i->second << "}\n";
// multimap 전체 요소 출력
cout << "\nElements in multimap is : \n";
cout << "KEY\tELEMENT\n";
for (auto it = mul.begin(); it!= mul.end(); ++it){
cout << it->first << '\t' << it->second << '\n';
}
return 0;
}실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
First element in multimap is: {1, 10}
Elements in multimap is :
KEY ELEMENT
1 10
2 20
3 30
4 40
5 50multimap::end()란?
multimap::end() 역시 C++ STL에 내장된 함수로, <map> 헤더 파일에 정의되어 있습니다. end()는 multimap 컨테이너의 마지막 요소 다음 위치(past-the-last element)에 접근할 때 사용합니다.
이 함수는 컨테이너의 마지막 요소 바로 다음을 가리키는 반복자를 반환합니다. 컨테이너가 비어 있으면 이 반복자 역시 역참조할 수 없습니다.
일반적으로 begin()과 end()는 함께 사용되어 컨테이너의 순회 범위(range)를 지정하며, 이를 통해 map 컨테이너의 모든 요소를 차례대로 탐색할 수 있습니다.
문법
multimap_name.end();
매개변수
이 함수는 어떤 매개변수도 받지 않습니다.
반환 값
컨테이너의 마지막 요소 다음 위치를 가리키는 반복자를 반환합니다. 이 위치에는 실제 요소가 존재하지 않으므로 역참조해서는 안 됩니다.
입력
std::multimap<char, int> mymap;
mymap.insert({'a', 10});
mymap.insert({'b', 20});
mymap.insert({'c', 30});
mymap.end();출력
error
end()가 가리키는 위치에는 유효한 요소가 없으므로, 이를 역참조해 출력하려고 하면 오류가 발생합니다.
예제: multimap::end()
#include <bits/stdc++.h>
using namespace std;
int main(){
multimap<int, int> mul;
// multimap에 요소 삽입
mul.insert({ 1, 10 });
mul.insert({ 2, 20 });
mul.insert({ 3, 30 });
mul.insert({ 4, 40 });
mul.insert({ 5, 50 });
// multimap 전체 요소 출력
cout << "\nElements in multimap is : \n";
cout << "KEY\tELEMENT\n";
for (auto it = mul.begin(); it!= mul.end(); ++it){
cout << it->first << '\t' << it->second << '\n';
}
return 0;
}실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
Elements in multimap is : KEY ELEMENT 1 10 2 20 3 30 4 40 5 50