이 글에서는 C++ STL에서 multimap::find() 함수의 동작 방식, 문법, 그리고 실제 활용 예제를 자세히 살펴봅니다.
C++ STL에서 멀티맵(Multimap)이란?
멀티맵은 맵(map) 컨테이너와 유사한 연관 컨테이너(associative container)입니다. 키(key)와 매핑된 값(mapped value)의 조합으로 구성된 요소들을 특정 순서에 따라 저장할 수 있습니다. 일반적인 맵과 달리, 멀티맵 컨테이너에는 동일한 키와 연관된 여러 개의 요소가 존재할 수 있다는 점이 특징입니다. 또한 데이터는 항상 내부적으로 키를 기준으로 정렬되어 관리됩니다.
multimap::find()란 무엇인가?
multimap::find()는 C++ STL에 내장된 함수로, <map> 헤더 파일에 정의되어 있습니다. find()는 컨테이너 내부에서 지정한 키 K와 연관된 요소를 검색하는 역할을 합니다. 이 함수는 컨테이너 내 단일 요소를 가리키는 반복자(iterator)를 반환하며, 검색 대상인 요소를 찾은 경우 해당 위치의 반복자를 반환합니다.
문법(Syntax)
iterator multimap_name.find(key);
매개변수(Parameters)
이 함수는 하나의 매개변수 key를 받으며, 이 매개변수는 컨테이너 내에서 검색하고자 하는 키를 지정합니다.
반환 값(Return Value)
이 함수는 컨테이너 내에서 해당 키가 존재하는 위치를 참조하는 반복자를 반환합니다. 만약 키가 존재하지 않으면 end() 반복자를 반환합니다.
입력 예시
multimap<char, int> newmap;
newmap.insert(make_pair('A', 22));
newmap.insert(make_pair('B', 78));
newmap.insert(make_pair('C', 66));
newmap.insert(make_pair('D', 81));
newmap.insert(make_pair('E', 43));
newmap.find('D');
출력
81
입력 예시
multimap<char, int> newmap; newmap.insert(make_pair(1, 15)); newmap.insert(make_pair(2, 18)); newmap.insert(make_pair(3, 45)); newmap.insert(make_pair(4, 66)); newmap.find(4);
출력
66
활용 접근 방법
먼저 맵(Map)을 초기화합니다.
그다음 키(Key)와 함께 요소를 삽입합니다.
find() 함수를 사용하여 해당 키의 위치를 찾습니다.
마지막으로 원하는 키와 그에 대응하는 요소를 출력합니다.
위와 같은 접근 방식을 활용하면 컨테이너 내의 어떤 키든 손쉽게 찾을 수 있으며, 특정 범위(range) 안에서 키의 위치를 탐색하는 것도 가능합니다.
예제 1
#include <iostream>
#include <map>
using namespace std;
int main() {
multimap<char, int> mp;
// 요소 삽입
mp.insert({'b', 23});
mp.insert({'a', 46});
mp.insert({'c', 78});
mp.insert({'e', 11});
mp.insert({'d', 34});
cout << "키 'c' 이후의 키 값 : \n";
cout << "Key\tElement\n";
for (auto i = mp.find('c'); i != mp.end(); i++)
cout << i->first << "\t" << i->second << '\n';
return 0;
}
출력 결과
위 코드를 실행하면 다음과 같은 출력이 생성됩니다.
KEY ELEMENT c 78 d 34 e 11
예제 2
#include <iostream>
#include <map>
using namespace std;
int main() {
multimap<char, int> mp;
// 요소 삽입
mp.insert({'1', 33});
mp.insert({'2', 66});
mp.insert({'3', 55});
mp.insert({'4', 11});
mp.insert({'5', 44});
cout << "키 '4' 이후의 키 값 : \n";
cout << "Key\tElement\n";
for (auto i = mp.find('4'); i != mp.end(); i++)
cout << i->first << "\t" << i->second << '\n';
return 0;
}
출력 결과
위 코드를 실행하면 다음과 같은 출력이 생성됩니다.
KEY ELEMENT 4 11 5 44
정리
multimap::find()는 멀티맵에서 특정 키를 빠르게 검색할 수 있는 유용한 도구입니다. 동일한 키를 가진 여러 요소가 존재할 경우, find()는 그중 하나의 요소를 가리키는 반복자를 반환한다는 점을 기억해 두면 좋습니다. 해당 키와 연관된 모든 요소를 확인하려면 find()로 얻은 반복자부터 end()까지 루프를 돌며 순회하면 됩니다.