std::unordered_multimap
std::unordered_multimap (다중 키 해시 연관 컨테이너)
같은 키를 허용하는 키-값 쌍들을 해시 기반으로 저장하는 연관 컨테이너예요. 평균 상수 시간 탐색이 가능해요. C++11부터 있어요.
출처: cppreference
본문
<unordered_map> 헤더에 정의돼 있고, 다중 키를 허용하는 해시 연관 컨테이너예요.
template<
class Key,
class T,
class Hash = std::hash<Key>,
class KeyEqual = std::equal_to<Key>,
class Allocator = std::allocator<std::pair<const Key, T>>
> class unordered_multimap;
C++17부터 pmr 별칭도 있어요.
std::unordered_multimap은 같은 키를 가진 키-값 쌍을 여러 개 허용하면서 저장하는 연관 컨테이너예요. 탐색·삽입·제거의 평균 상수 시간 복잡도를 가져요. 내부적으로 원소들이 버킷들에 저장되고 키가 해시 함수로 버킷 인덱스에 매핑돼요.
std::unordered_map과 달리 같은 키를 여러 번 가질 수 있어요. operator[]는 없고(키가 유일하지 않으므로) 같은 키의 모든 값을 equal_range로 얻을 수 있어요. 원소의 순서는 정렬돼 있지 않아요.
unordered_multimap은 Container, AllocatorAwareContainer, UnorderedAssociativeContainer 요구사항을 만족해요.
멤버 타입
key_type, mapped_type, value_type(std::pair<const Key, T>), size_type, difference_type, hasher = Hash, key_equal = KeyEqual, allocator_type, reference, const_reference, pointer, const_pointer, iterator, const_iterator, local_iterator, const_local_iterator, node_type(C++17).
멤버 함수
- 생성자, 소멸자,
operator=,get_allocator. - 반복자:
begin/cbegin,end/cend. - 용량:
empty,size,max_size. - 수정자:
clear,insert,insert_range(C++23),emplace,emplace_hint,erase,erase_if(C++20),swap,extract(C++17),merge(C++17). - 탐색:
count,find,contains(C++20),equal_range. - 버킷 인터페이스:
begin(c)/end(c),bucket_count,max_bucket_count,bucket_size,bucket. - 해시 정책:
load_factor,max_load_factor,rehash,reserve. - 관찰자:
hash_function,key_eq.
비멤버 함수
operator==,!=: 두 unordered_multimap 비교.std::swap:std::swap특수화.erase_if(C++20): 특정 기준을 만족하는 원소 모두 제거.
한 키에 여러 값을 빠르게 매핑해야 할 때(예: 단어→여러 발생 위치) 유용해요. equal_range로 같은 키의 전체 범위를 얻을 수 있어요.