std::multimap

std::multimap (다중 키 정렬 연관 컨테이너)

정렬된 키-값 쌍 목록을 저장하되, 같은 키를 가진 여러 항목을 허용하는 연관 컨테이너예요. 탐색·삽입·제거가 로그 시간 복잡도예요.

출처: cppreference

본문

<map> 헤더에 정의돼 있고, 다중 키를 허용하는 정렬 연관 컨테이너예요.

template<
    class Key,
    class T,
    class Compare = std::less<Key>,
    class Allocator = std::allocator<std::pair<const Key, T>>
> class multimap;

C++17부터 pmr 별칭도 있어요: std::pmr::multimap<Key, T, Compare>.

std::multimap은 정렬된 키-값 쌍 목록을 저장하되 같은 키를 가진 여러 항목을 허용하는 연관 컨테이너예요. 정렬은 키에 적용되는 비교 함수 Compare에 따라 이뤄져요. 탐색·삽입·제거는 로그 시간 복잡도를 가져요.

std::multimap의 반복자는 키의 비내림차순(non-descending) 순서로 순회해요. 키가 동등하게 비교되는 키-값 쌍들의 순서는 삽입 순서이며 바뀌지 않아요 (C++11부터).

std::multimapContainer, AllocatorAwareContainer, AssociativeContainer, ReversibleContainer 요구사항을 만족해요. C++26부터 모든 멤버 함수가 constexpr이에요.

멤버 타입

key_type, mapped_type, value_type(std::pair<const Key, T>), size_type, difference_type, key_compare, allocator_type, reference, const_reference, pointer, const_pointer, iterator, const_iterator, reverse_iterator, const_reverse_iterator, node_type(C++17).

멤버 함수

  • 생성자, 소멸자, operator=, get_allocator.
  • 반복자: begin/cbegin, end/cend, rbegin/crbegin, rend/crend.
  • 용량: empty, size, max_size.
  • 수정자: clear, insert, insert_range(C++23), emplace, emplace_hint, erase, swap, extract(C++17), merge(C++17).
  • 탐색: count, find, contains(C++20), equal_range, lower_bound, upper_bound.
  • 관찰자: key_comp, value_comp.

비멤버 함수

  • operator==, !=, <, <=, >, >=, <=>: 두 multimap 사전식 비교.
  • std::swap(std::multimap): std::swap 특수화.
  • erase_if(std::multimap) (C++20): 특정 기준을 만족하는 원소 모두 제거.

map과 달리 multimap은 같은 키를 여러 번 가질 수 있어요. operator[]는 없고(키가 유일해야 하므로) insert로 키-값 쌍을 삽입하며, equal_range로 같은 키의 전체 범위를 얻을 수 있어요. 한 키에 여러 값을 매핑해야 할 때 유용해요.

더 알아보기 (Learn more)

cppreference