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::multimap은 Container, 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로 같은 키의 전체 범위를 얻을 수 있어요. 한 키에 여러 값을 매핑해야 할 때 유용해요.