이 글에서는 C++ STL의 multimap::count() 함수가 어떻게 동작하는지, 그리고 문법과 실제 사용 예제를 통해 자세히 살펴보겠습니다.
C++ STL에서 멀티맵(Multimap)이란?
멀티맵은 맵(map) 컨테이너와 유사한 연관 컨테이너(associative container)입니다. 마찬가지로 키(key)와 값(value)의 쌍으로 구성된 요소들을 특정 순서에 따라 저장합니다. 일반적인 맵과의 가장 큰 차이점은, 멀티맵에서는 동일한 키를 가진 여러 요소가 공존할 수 있다는 점입니다. 또한 내부 데이터는 항상 키를 기준으로 자동 정렬되어 유지됩니다.
multimap::count()란 무엇인가?
multimap::count()는 C++ STL에 내장된 함수로, <map> 헤더 파일에 정의되어 있습니다. 이 함수는 대상 멀티맵 컨테이너 안에서 지정한 키와 연결된 요소가 총 몇 개 있는지 그 개수를 계산하는 데 사용됩니다.
만약 찾고자 하는 키가 멀티맵에 존재하지 않는다면, 이 함수는 0을 반환합니다.
문법(Syntax)
multimap_name.count(key_type& key);
매개변수(Parameters)
이 함수는 아래와 같은 매개변수를 받습니다.
key − 검색하려는 키입니다. 이 키와 연관된 요소의 개수를 세어 반환합니다.
반환값(Return Value)
이 함수는 정수형 값을 반환하며, 그 값은 동일한 키를 가진 요소의 개수입니다. 참고로 이 함수의 시간 복잡도는 로그 시간(O(log n))에 요소 개수를 더한 수준으로, 큰 컨테이너에서도 효율적으로 동작합니다.
간단한 입력 예시
std::multimap<char, int> odd;
odd.insert(make_pair('a', 1));
odd.insert(make_pair('a', 3));
odd.insert(make_pair('c', 5));
odd.count('a');
출력 결과
2
'a'라는 키가 두 번 삽입되었기 때문에 count()는 2를 반환합니다.
예제 코드
#include <bits/stdc++.h>
using namespace std;
int main(){
// 멀티맵 컨테이너 생성
multimap<int, int> mul;
// emplace_hint를 이용해 요소 삽입
mul.emplace_hint(mul.begin(), 1, 10);
mul.emplace_hint(mul.begin(), 2, 20);
mul.emplace_hint(mul.begin(), 2, 30);
mul.emplace_hint(mul.begin(), 1, 40);
mul.emplace_hint(mul.begin(), 1, 50);
mul.emplace_hint(mul.begin(), 5, 60);
cout << "\n멀티맵에 저장된 요소 : \n";
cout << "KEY\tELEMENT\n";
for (auto i = mul.begin(); i != mul.end(); i++){
cout << i->first << "\t" << i->second << endl;
}
cout << "키 1은 멀티맵에 " << mul.count(1) << "번 나타납니다\n";
cout << "키 2는 멀티맵에 " << mul.count(2) << "번 나타납니다\n";
return 0;
}
실행 결과
위 코드를 실행하면 다음과 같은 출력이 생성됩니다.
멀티맵에 저장된 요소 : KEY ELEMENT 1 50 1 40 1 10 2 30 2 20 5 60 키 1은 멀티맵에 3번 나타납니다 키 2는 멀티맵에 2번 나타납니다
마무리
multimap::count()는 동일한 키가 여러 개 존재할 수 있는 멀티맵의 특성을 고려할 때 매우 유용한 함수입니다. 별도의 반복문 없이도 특정 키의 등장 횟수를 즉시 확인할 수 있어, 빈도 분석이나 키 중복 검사 등 다양한 상황에서 활용할 수 있습니다. 단, 단순히 키의 존재 여부만 확인하고 싶다면 count() 대신 find()나 contains()(C++20 이상)를 사용하는 것이 의미상 더 명확합니다.