flat_multiset
flat_multiset (std::flat_multiset — 평면 멀티셋)
std::flat_multiset은 컨테이너 어댑터로, Key 타입 객체들의 정렬된 집합을 저장하는 연관 컨테이너의 기능을 제공해요. std::flat_set과 달리 동등한 값을 가진 여러 키를 허용해요. 정렬은 키 비교 함수 Compare로 수행돼요.
출처: cppreference
본문
클래스 템플릿 flat_multiset은 KeyContainer 타입의 객체로 넘겨받은 내부 정렬 컨테이너를 감싸는 래퍼 역할을 해요. flat_multiset의 모든 멤버 함수는 constexpr이에요.
표준 라이브러리가 Compare 요구 사항을 쓰는 곳마다, 동등성은 동치 관계(equivalence relation)로 결정돼요. 간단히 말해 두 객체 a와 b는 서로가 상대보다 작다고 비교되지 않을 때(!comp(a, b) && !comp(b, a)) 동등한 것으로 봐요.
std::flat_multiset은 Container, ReversibleContainer, 선택적 컨테이너 요구 사항을 만족하며, AssociativeContainer의 모든 요구 사항(로그 검색 복잡도 포함)을 다음 예외와 함께 만족해요.
- 노드 관련 요구 사항은 적용되지 않아요.
- 이터레이터 무효화 요구 사항이 달라요.
- 삽입·삭제 연산의 복잡도는 선형(linear)이에요.
평면 멀티셋은 같은 키를 쓰는 AssociativeContainer 연산의 대부분을 지원해요.
std::flat_multiset의 모든 멤버 함수는 constexpr이어서 상수 표현식 평가에서 객체를 만들고 쓸 수 있어요. 다만 constexpr std::flat_multiset 변수를 정의하는 건 보통 오류예요. 상수 평가는 동적 할당 저장소가 같은 평가에서 해제되길 요구하는데, std::flat_multiset의 초기화에서는 보통 그렇지 않기 때문이에요. (since C++26)
템플릿 매개변수
Key: 저장된 원소의 타입.Key가KeyContainer::value_type과 같은 타입이 아니면 프로그램은 ill-formed예요.Compare: 엄격한 약순서(strict weak ordering)를 제공하는 Compare 타입.KeyContainer: 키를 저장하는 내부 SequenceContainer의 타입. 이 컨테이너의 이터레이터는 LegacyRandomAccessIterator를 만족하거나 random_access_iterator를 모델링해야 해요.size와max_size멤버 함수 호출은 예외로 빠져나가면 안 돼요. 표준 컨테이너std::vector와std::deque가 이 요구 사항을 만족해요.
멤버 타입
key_type=Keyvalue_type=Keykey_container_type=KeyContainercontainer_type=KeyContainersize_type=typename KeyContainer::size_typedifference_type=typename KeyContainer::difference_typekey_compare=Comparevalue_compare—key_comp와 같은 비교 함수 객체 타입reference=value_type&const_reference=const value_type&iterator,const_iterator— LegacyRandomAccessIterator를 만족하는 타입reverse_iterator=std::reverse_iterator<iterator>const_reverse_iterator=std::reverse_iterator<const_iterator>
멤버 함수
- 생성자/파괴자,
operator=,assign_range,get_allocator - 이터레이터:
begin,end,rbegin,rend - 용량:
empty,size,max_size - 수정자:
clear,insert,insert_range,emplace,emplace_hint,erase,erase_if,swap,extract,replace - 탐색:
count,find,contains,equal_range,lower_bound,upper_bound - 관찰자:
key_comp,value_comp - 비멤버 함수:
operator==,operator<=>,std::erase,std::erase_if,std::swap