본문 바로가기
c++

C++ STL 멀티맵(Multimap) 이해하기

by blacknabis 2024. 4. 24.

C++ STL 멀티맵(Multimap) 이해하기

C++ 표준 템플릿 라이브러리(STL)의 멀티맵은 키와 값의 쌍을 저장하는 연관 컨테이너입니다. 멀티맵의 가장 큰 특징은 같은 키에 여러 개의 값을 연결할 수 있다는 점입니다. 이는 기본 맵과 비교했을 때 중요한 차이점으로, 맵에서는 각 키에 하나의 값만 연결됩니다.

멀티맵의 특징

  1. 중복 키 허용: 하나의 키에 여러 값이 연결될 수 있어, 복수의 데이터를 같은 키에 연결하여 관리할 수 있습니다.
  2. 자동 정렬: 멀티맵은 키를 기준으로 자동으로 정렬합니다. 기본적으로 오름차순으로 정렬되나, 사용자가 정의한 비교 함수를 통해 정렬 순서를 변경할 수 있습니다.
  3. 효율적인 검색: 로그 시간 복잡도를 가지는 검색 성능을 제공합니다. 이는 내부적으로 이진 검색 트리 구조를 사용하기 때문입니다.

멀티맵의 핵심 메서드

  • insert(): 키-값 쌍을 추가합니다. 같은 키가 이미 존재하더라도 새로운 쌍을 추가합니다.
  • find(): 주어진 키를 가진 원소를 찾고, 해당 원소를 가리키는 iterator를 반환합니다. 키가 없으면 end() iterator를 반환합니다.
  • count(): 주어진 키를 가진 원소의 수를 반환합니다.
  • erase(): 특정 키 또는 원소를 제거합니다. 키를 지정하면 해당 키의 모든 원소를 제거할 수 있습니다.
  • lower_bound()upper_bound(): 키의 범위를 정하여 해당 범위 내 원소들을 탐색할 수 있게 합니다.
  • equal_range(): 특정 키를 가진 범위의 원소들을 한 번에 반환합니다. 이 메서드는 키에 해당하는 원소들의 시작과 끝 iterator를 쌍으로 반환하며, firstsecond를 통해 접근할 수 있습니다.

예제 코드

#include <iostream>
#include <map>

int main() {
    std::multimap<int, std::string> mm;

    // 키-값 쌍 추가
    mm.insert(std::make_pair(1, "Apple"));
    mm.insert(std::make_pair(1, "Airplane"));
    mm.insert(std::make_pair(2, "Banana"));

    // 특정 키의 모든 값 출력
    auto range = mm.equal_range(1);
    for (auto it = range.first; it != range.second; ++it) {
        std::cout << it->first << ": " << it->second << std::endl;
    }

    return 0;
}

이 예제에서는 멀티맵에 키-값 쌍을 추가한 후, equal_range()를 사용하여 키 '1'에 해당하는 모든 값을 찾아 출력합니다. equal_range()는 키가 같은 모든 원소를 효율적으로 처리할 수 있도록 도와줍니다.