This header is part of the
library.
Includes
(C++20)
support
(C++11)
class template
Classes
(C++23)
adapts a container to provide a collection of unique keys, sorted by keys
(class template)
(C++23)
adapts a container to provide a collection of keys, sorted by keys
(class template)
std::uses_allocator<std::flat_set>
(C++23)
specializes the
type trait
(class template specialization)
std::uses_allocator<std::flat_multiset>
(C++23)
specializes the
type trait
(class template specialization)
Functions
(C++23)
erases all elements satisfying specific criteria
(function template)
(C++23)
erases all elements satisfying specific criteria
(function template)
Range access
(C++11)(C++14)
returns an iterator to the beginning of a container or array
(function template)
(C++11)(C++14)
returns an iterator to the end of a container or array
(function template)
(C++14)
returns a reverse iterator to the beginning of a container or array
(function template)
(C++14)
returns a reverse end iterator for a container or array
(function template)
(C++17)(C++20)
returns the size of a container or array
(function template)
(C++17)
checks whether the container is empty
(function template)
(C++17)
obtains the pointer to the underlying array
(function template)
Tags
(C++23)
indicates that elements of a range are sorted and unique
(tag)
sorted_equivalentsorted_equivalent_t
(C++23)
indicates that elements of a range are sorted (uniqueness is not required)
(tag)
Synopsis
#include<compare>#include<initializer_list>namespacestd{// class template flat_settemplate<classKey,classCompare=less<Key>,classKeyContainer=vector<Key>>classflat_set;structsorted_unique_t{explicitsorted_unique_t()=default;};inlineconstexprsorted_unique_tsorted_unique{};template<classKey,classCompare,classKeyContainer,classAllocator>structuses_allocator<flat_set<Key,Compare,KeyContainer>,Allocator>;// erasure for flat_settemplate<classKey,classCompare,classKeyContainer,classPredicate>constexprtypenameflat_set<Key,Compare,KeyContainer>::size_typeerase_if(flat_set<Key,Compare,KeyContainer>&c,Predicatepred);// class template flat_multisettemplate<classKey,classCompare=less<Key>,classKeyContainer=vector<Key>>classflat_multiset;structsorted_equivalent_t{explicitsorted_equivalent_t()=default;};inlineconstexprsorted_equivalent_tsorted_equivalent{};template<classKey,classCompare,classKeyContainer,classAllocator>structuses_allocator<flat_multiset<Key,Compare,KeyContainer>,Allocator>;// erasure for flat_multisettemplate<classKey,classCompare,classKeyContainer,classPredicate>constexprtypenameflat_multiset<Key,Compare,KeyContainer>::size_typeerase_if(flat_multiset<Key,Compare,KeyContainer>&c,Predicatepred);}Class template std::flat_set
namespacestd{template<classKey,classCompare=less<Key>,classKeyContainer=vector<Key>>classflat_set{public:// typesusingkey_type=Key;usingvalue_type=Key;usingkey_compare=Compare;usingvalue_compare=Compare;usingreference=value_type&;usingconst_reference=constvalue_type&;usingsize_type=KeyContainer::size_type;usingdifference_type=KeyContainer::difference_type;usingiterator=/* implementation-defined */;usingconst_iterator=/* implementation-defined */;usingreverse_iterator=std::reverse_iterator<iterator>;usingconst_reverse_iterator=std::reverse_iterator<const_iterator>;usingcontainer_type=KeyContainer;// constructorsconstexprflat_set():flat_set(key_compare()){}constexprflat_set(constflat_set&);constexprflat_set(flat_set&&);constexprflat_set&operator=(constflat_set&);constexprflat_set&operator=(flat_set&&);constexprexplicitflat_set(constkey_compare&comp):/*c*/(),/*compare*/(comp){}constexprexplicitflat_set(container_typecont,constkey_compare&comp=key_compare());constexprflat_set(sorted_unique_t,container_typecont,constkey_compare&comp=key_compare()):/*c*/(std::move(cont)),/*compare*/(comp){}template<classInputIter>constexprflat_set(InputIterfirst,InputIterlast,constkey_compare&comp=key_compare()):/*c*/(),/*compare*/(comp){insert(first,last);}template<classInputIter>constexprflat_set(sorted_unique_t,InputIterfirst,InputIterlast,constkey_compare&comp=key_compare()):/*c*/(first,last),/*compare*/(comp){}template<container-compatible-range<value_type>R>constexprflat_set(from_range_t,R&&rg):flat_set(from_range,std::forward<R>(rg),key_compare()){}template<container-compatible-range<value_type>R>constexprflat_set(from_range_t,R&&rg,constkey_compare&comp):flat_set(comp){insert_range(std::forward<R>(rg));}constexprflat_set(initializer_list<value_type>il,constkey_compare&comp=key_compare()):flat_set(il.begin(),il.end(),comp){}constexprflat_set(sorted_unique_t,initializer_list<value_type>il,constkey_compare&comp=key_compare()):flat_set(sorted_unique,il.begin(),il.end(),comp){}// constructors with allocatorstemplate<classAlloc>constexprexplicitflat_set(constAlloc&a);template<classAlloc>constexprflat_set(constkey_compare&comp,constAlloc&a);template<classAlloc>constexprflat_set(constcontainer_type&cont,constAlloc&a);template<classAlloc>constexprflat_set(constcontainer_type&cont,constkey_compare&comp,constAlloc&a);template<classAlloc>constexprflat_set(sorted_unique_t,constcontainer_type&cont,constAlloc&a);template<classAlloc>constexprflat_set(sorted_unique_t,constcontainer_type&cont,constkey_compare&comp,constAlloc&a);template<classAlloc>constexprflat_set(constflat_set&,constAlloc&a);template<classAlloc>constexprflat_set(flat_set&&,constAlloc&a);template<classInputIter,classAlloc>constexprflat_set(InputIterfirst,InputIterlast,constAlloc&a);template<classInputIter,classAlloc>constexprflat_set(InputIterfirst,InputIterlast,constkey_compare&comp,constAlloc&a);template<classInputIter,classAlloc>constexprflat_set(sorted_unique_t,InputIterfirst,InputIterlast,constAlloc&a);template<classInputIter,classAlloc>constexprflat_set(sorted_unique_t,InputIterfirst,InputIterlast,constkey_compare&comp,constAlloc&a);template<container-compatible-range<value_type>R,classAlloc>constexprflat_set(from_range_t,R&&rg,constAlloc&a);template<container-compatible-range<value_type>R,classAlloc>constexprflat_set(from_range_t,R&&rg,constkey_compare&comp,constAlloc&a);template<classAlloc>constexprflat_set(initializer_list<value_type>il,constAlloc&a);template<classAlloc>constexprflat_set(initializer_list<value_type>il,constkey_compare&comp,constAlloc&a);template<classAlloc>constexprflat_set(sorted_unique_t,initializer_list<value_type>il,constAlloc&a);template<classAlloc>constexprflat_set(sorted_unique_t,initializer_list<value_type>il,constkey_compare&comp,constAlloc&a);constexprflat_set&operator=(initializer_list<value_type>);// iteratorsconstexpriteratorbegin()noexcept;constexprconst_iteratorbegin()constnoexcept;constexpriteratorend()noexcept;constexprconst_iteratorend()constnoexcept;constexprreverse_iteratorrbegin()noexcept;constexprconst_reverse_iteratorrbegin()constnoexcept;constexprreverse_iteratorrend()noexcept;constexprconst_reverse_iteratorrend()constnoexcept;constexprconst_iteratorcbegin()constnoexcept;constexprconst_iteratorcend()constnoexcept;constexprconst_reverse_iteratorcrbegin()constnoexcept;constexprconst_reverse_iteratorcrend()constnoexcept;// capacityconstexprboolempty()constnoexcept;constexprsize_typesize()constnoexcept;constexprsize_typemax_size()constnoexcept;// modifierstemplate<class...Args>constexprpair<iterator,bool>emplace(Args&&...args);template<class...Args>constexpriteratoremplace_hint(const_iteratorposition,Args&&...args);constexprpair<iterator,bool>insert(constvalue_type&x){returnemplace(x);}constexprpair<iterator,bool>insert(value_type&&x){returnemplace(std::move(x));}template<classK>constexprpair<iterator,bool>insert(K&&x);constexpriteratorinsert(const_iteratorposition,constvalue_type&x){returnemplace_hint(position,x);}constexpriteratorinsert(const_iteratorposition,value_type&&x){returnemplace_hint(position,std::move(x));}template<classK>constexpriteratorinsert(const_iteratorhint,K&&x);template<classInputIter>constexprvoidinsert(InputIterfirst,InputIterlast);template<classInputIter>constexprvoidinsert(sorted_unique_t,InputIterfirst,InputIterlast);template<container-compatible-range<value_type>R>constexprvoidinsert_range(R&&rg);template<container-compatible-range<value_type>R>constexprvoidinsert_range(sorted_unique_t,R&&rg);constexprvoidinsert(initializer_list<value_type>il){insert(il.begin(),il.end());}constexprvoidinsert(sorted_unique_t,initializer_list<value_type>il){insert(sorted_unique,il.begin(),il.end());}constexprcontainer_typeextract()&&;constexprvoidreplace(container_type&&);constexpriteratorerase(iteratorposition)requires(!same_as<iterator,const_iterator>);constexpriteratorerase(const_iteratorposition);constexprsize_typeerase(constkey_type&x);template<classK>constexprsize_typeerase(K&&x);constexpriteratorerase(const_iteratorfirst,const_iteratorlast);constexprvoidswap(flat_set&y)noexcept(/* see description */);constexprvoidclear()noexcept;// observersconstexprkey_comparekey_comp()const;constexprvalue_comparevalue_comp()const;// set operationsconstexpriteratorfind(constkey_type&x);constexprconst_iteratorfind(constkey_type&x)const;template<classK>constexpriteratorfind(constK&x);template<classK>constexprconst_iteratorfind(constK&x)const;constexprsize_typecount(constkey_type&x)const;template<classK>constexprsize_typecount(constK&x)const;constexprboolcontains(constkey_type&x)const;template<classK>constexprboolcontains(constK&x)const;constexpriteratorlower_bound(constkey_type&x);constexprconst_iteratorlower_bound(constkey_type&x)const;template<classK>constexpriteratorlower_bound(constK&x);template<classK>constexprconst_iteratorlower_bound(constK&x)const;constexpriteratorupper_bound(constkey_type&x);constexprconst_iteratorupper_bound(constkey_type&x)const;template<classK>constexpriteratorupper_bound(constK&x);template<classK>constexprconst_iteratorupper_bound(constK&x)const;constexprpair<iterator,iterator>equal_range(constkey_type&x);constexprpair<const_iterator,const_iterator>equal_range(constkey_type&x)const;template<classK>constexprpair<iterator,iterator>equal_range(constK&x);template<classK>constexprpair<const_iterator,const_iterator>equal_range(constK&x)const;friendconstexprbooloperator==(constflat_set&x,constflat_set&y);friendconstexpr/*synth-three-way-result*/<value_type>operator<=>(constflat_set&x,constflat_set&y);friendconstexprvoidswap(flat_set&x,flat_set&y)noexcept(noexcept(x.swap(y))){x.swap(y);}private:container_type/*c*/;// exposition-onlykey_compare/*compare*/;// exposition-only};template<classKeyContainer,classCompare=less<typenameKeyContainer::value_type>>flat_set(KeyContainer,Compare=Compare())->flat_set<typenameKeyContainer::value_type,Compare,KeyContainer>;template<classKeyContainer,classAllocator>flat_set(KeyContainer,Allocator)->flat_set<typenameKeyContainer::value_type,less<typenameKeyContainer::value_type>,KeyContainer>;template<classKeyContainer,classCompare,classAllocator>flat_set(KeyContainer,Compare,Allocator)->flat_set<typenameKeyContainer::value_type,Compare,KeyContainer>;template<classKeyContainer,classCompare=less<typenameKeyContainer::value_type>>flat_set(sorted_unique_t,KeyContainer,Compare=Compare())->flat_set<typenameKeyContainer::value_type,Compare,KeyContainer>;template<classKeyContainer,classAllocator>flat_set(sorted_unique_t,KeyContainer,Allocator)->flat_set<typenameKeyContainer::value_type,less<typenameKeyContainer::value_type>,KeyContainer>;template<classKeyContainer,classCompare,classAllocator>flat_set(sorted_unique_t,KeyContainer,Compare,Allocator)->flat_set<typenameKeyContainer::value_type,Compare,KeyContainer>;template<classInputIter,classCompare=less</*iter-value-type*/<InputIter>>>flat_set(InputIter,InputIter,Compare=Compare())->flat_set</*iter-value-type*/<InputIter>,Compare>;template<classInputIter,classCompare=less</*iter-value-type*/<InputIter>>>flat_set(sorted_unique_t,InputIter,InputIter,Compare=Compare())->flat_set</*iter-value-type*/<InputIter>,Compare>;template<ranges::input_rangeR,classCompare=less<ranges::range_value_t<R>>,classAllocator=allocator<ranges::range_value_t<R>>>flat_set(from_range_t,R&&,Compare=Compare(),Allocator=Allocator())->flat_set<ranges::range_value_t<R>,Compare,vector<ranges::range_value_t<R>,/*alloc-rebind*/<Allocator,ranges::range_value_t<R>>>>;template<ranges::input_rangeR,classAllocator>flat_set(from_range_t,R&&,Allocator)->flat_set<ranges::range_value_t<R>,less<ranges::range_value_t<R>>,vector<ranges::range_value_t<R>,/*alloc-rebind*/<Allocator,ranges::range_value_t<R>>>>;template<classKey,classCompare=less<Key>>flat_set(initializer_list<Key>,Compare=Compare())->flat_set<Key,Compare>;template<classKey,classCompare=less<Key>>flat_set(sorted_unique_t,initializer_list<Key>,Compare=Compare())->flat_set<Key,Compare>;template<classKey,classCompare,classKeyContainer,classAllocator>structuses_allocator<flat_set<Key,Compare,KeyContainer>,Allocator>:bool_constant<uses_allocator_v<KeyContainer,Allocator>>{};}Class template std::flat_multiset
namespacestd{template<classKey,classCompare=less<Key>,classKeyContainer=vector<Key>>classflat_multiset{public:// typesusingkey_type=Key;usingvalue_type=Key;usingkey_compare=Compare;usingvalue_compare=Compare;usingreference=value_type&;usingconst_reference=constvalue_type&;usingsize_type=KeyContainer::size_type;usingdifference_type=KeyContainer::difference_type;usingiterator=/* implementation-defined */;usingconst_iterator=/* implementation-defined */;usingreverse_iterator=std::reverse_iterator<iterator>;usingconst_reverse_iterator=std::reverse_iterator<const_iterator>;usingcontainer_type=KeyContainer;// constructorsconstexprflat_multiset():flat_multiset(key_compare()){}constexprflat_multiset(constflat_multiset&);constexprflat_multiset(flat_multiset&&);constexprflat_multiset&operator=(constflat_multiset&);constexprflat_multiset&operator=(flat_multiset&&);constexprexplicitflat_multiset(constkey_compare&comp):/*c*/(),/*compare*/(comp){}constexprexplicitflat_multiset(container_typecont,constkey_compare&comp=key_compare());constexprflat_multiset(sorted_equivalent_t,container_typecont,constkey_compare&comp=key_compare()):/*c*/(std::move(cont)),/*compare*/(comp){}template<classInputIter>constexprflat_multiset(InputIterfirst,InputIterlast,constkey_compare&comp=key_compare()):/*c*/(),/*compare*/(comp){insert(first,last);}template<classInputIter>constexprflat_multiset(sorted_equivalent_t,InputIterfirst,InputIterlast,constkey_compare&comp=key_compare()):/*c*/(first,last),/*compare*/(comp){}template<container-compatible-range<value_type>R>constexprflat_multiset(from_range_t,R&&rg):flat_multiset(from_range,std::forward<R>(rg),key_compare()){}template<container-compatible-range<value_type>R>constexprflat_multiset(from_range_t,R&&rg,constkey_compare&comp):flat_multiset(comp){insert_range(std::forward<R>(rg));}constexprflat_multiset(initializer_list<value_type>il,constkey_compare&comp=key_compare()):flat_multiset(il.begin(),il.end(),comp){}constexprflat_multiset(sorted_equivalent_t,initializer_list<value_type>il,constkey_compare&comp=key_compare()):flat_multiset(sorted_equivalent,il.begin(),il.end(),comp){}// constructors with allocatorstemplate<classAlloc>constexprexplicitflat_multiset(constAlloc&a);template<classAlloc>constexprflat_multiset(constkey_compare&comp,constAlloc&a);template<classAlloc>constexprflat_multiset(constcontainer_type&cont,constAlloc&a);template<classAlloc>constexprflat_multiset(constcontainer_type&cont,constkey_compare&comp,constAlloc&a);template<classAlloc>constexprflat_multiset(sorted_equivalent_t,constcontainer_type&cont,constAlloc&a);template<classAlloc>constexprflat_multiset(sorted_equivalent_t,constcontainer_type&cont,constkey_compare&comp,constAlloc&a);template<classAlloc>constexprflat_multiset(constflat_multiset&,constAlloc&a);template<classAlloc>constexprflat_multiset(flat_multiset&&,constAlloc&a);template<classInputIter,classAlloc>constexprflat_multiset(InputIterfirst,InputIterlast,constAlloc&a);template<classInputIter,classAlloc>constexprflat_multiset(InputIterfirst,InputIterlast,constkey_compare&comp,constAlloc&a);template<classInputIter,classAlloc>constexprflat_multiset(sorted_equivalent_t,InputIterfirst,InputIterlast,constAlloc&a);template<classInputIter,classAlloc>constexprflat_multiset(sorted_equivalent_t,InputIterfirst,InputIterlast,constkey_compare&comp,constAlloc&a);template<container-compatible-range<value_type>R,classAlloc>constexprflat_multiset(from_range_t,R&&rg,constAlloc&a);template<container-compatible-range<value_type>R,classAlloc>constexprflat_multiset(from_range_t,R&&rg,constkey_compare&comp,constAlloc&a);template<classAlloc>constexprflat_multiset(initializer_list<value_type>il,constAlloc&a);template<classAlloc>constexprflat_multiset(initializer_list<value_type>il,constkey_compare&comp,constAlloc&a);template<classAlloc>constexprflat_multiset(sorted_equivalent_t,initializer_list<value_type>il,constAlloc&a);template<classAlloc>constexprflat_multiset(sorted_equivalent_t,initializer_list<value_type>il,constkey_compare&comp,constAlloc&a);constexprflat_multiset&operator=(initializer_list<value_type>);// iteratorsconstexpriteratorbegin()noexcept;constexprconst_iteratorbegin()constnoexcept;constexpriteratorend()noexcept;constexprconst_iteratorend()constnoexcept;constexprreverse_iteratorrbegin()noexcept;constexprconst_reverse_iteratorrbegin()constnoexcept;constexprreverse_iteratorrend()noexcept;constexprconst_reverse_iteratorrend()constnoexcept;constexprconst_iteratorcbegin()constnoexcept;constexprconst_iteratorcend()constnoexcept;constexprconst_reverse_iteratorcrbegin()constnoexcept;constexprconst_reverse_iteratorcrend()constnoexcept;// capacityconstexprboolempty()constnoexcept;constexprsize_typesize()constnoexcept;constexprsize_typemax_size()constnoexcept;// modifierstemplate<class...Args>constexpriteratoremplace(Args&&...args);template<class...Args>constexpriteratoremplace_hint(const_iteratorposition,Args&&...args);constexpriteratorinsert(constvalue_type&x){returnemplace(x);}constexpriteratorinsert(value_type&&x){returnemplace(std::move(x));}constexpriteratorinsert(const_iteratorposition,constvalue_type&x){returnemplace_hint(position,x);}constexpriteratorinsert(const_iteratorposition,value_type&&x){returnemplace_hint(position,std::move(x));}template<classInputIter>constexprvoidinsert(InputIterfirst,InputIterlast);template<classInputIter>constexprvoidinsert(sorted_equivalent_t,InputIterfirst,InputIterlast);template<container-compatible-range<value_type>R>constexprvoidinsert_range(R&&rg);template<container-compatible-range<value_type>R>constexprvoidinsert_range(sorted_equivalent_t,R&&rg);constexprvoidinsert(initializer_list<value_type>il){insert(il.begin(),il.end());}constexprvoidinsert(sorted_equivalent_t,initializer_list<value_type>il){insert(sorted_equivalent,il.begin(),il.end());}constexprcontainer_typeextract()&&;constexprvoidreplace(container_type&&);constexpriteratorerase(iteratorposition)requires(!same_as<iterator,const_iterator>);constexpriteratorerase(const_iteratorposition);constexprsize_typeerase(constkey_type&x);template<classK>constexprsize_typeerase(K&&x);constexpriteratorerase(const_iteratorfirst,const_iteratorlast);constexprvoidswap(flat_multiset&y)noexcept(/* see description */);constexprvoidclear()noexcept;// observersconstexprkey_comparekey_comp()const;constexprvalue_comparevalue_comp()const;// set operationsconstexpriteratorfind(constkey_type&x);constexprconst_iteratorfind(constkey_type&x)const;template<classK>constexpriteratorfind(constK&x);template<classK>constexprconst_iteratorfind(constK&x)const;constexprsize_typecount(constkey_type&x)const;template<classK>constexprsize_typecount(constK&x)const;constexprboolcontains(constkey_type&x)const;template<classK>constexprboolcontains(constK&x)const;constexpriteratorlower_bound(constkey_type&x);constexprconst_iteratorlower_bound(constkey_type&x)const;template<classK>constexpriteratorlower_bound(constK&x);template<classK>constexprconst_iteratorlower_bound(constK&x)const;constexpriteratorupper_bound(constkey_type&x);constexprconst_iteratorupper_bound(constkey_type&x)const;template<classK>constexpriteratorupper_bound(constK&x);template<classK>constexprconst_iteratorupper_bound(constK&x)const;constexprpair<iterator,iterator>equal_range(constkey_type&x);constexprpair<const_iterator,const_iterator>equal_range(constkey_type&x)const;template<classK>constexprpair<iterator,iterator>equal_range(constK&x);template<classK>constexprpair<const_iterator,const_iterator>equal_range(constK&x)const;friendconstexprbooloperator==(constflat_multiset&x,constflat_multiset&y);friendconstexpr/*synth-three-way-result*/<value_type>operator<=>(constflat_multiset&x,constflat_multiset&y);friendconstexprvoidswap(flat_multiset&x,flat_multiset&y)noexcept(noexcept(x.swap(y))){x.swap(y);}private:container_type/*c*/;// exposition-onlykey_compare/*compare*/;// exposition-only};template<classKeyContainer,classCompare=less<typenameKeyContainer::value_type>>flat_multiset(KeyContainer,Compare=Compare())->flat_multiset<typenameKeyContainer::value_type,Compare,KeyContainer>;template<classKeyContainer,classAllocator>flat_multiset(KeyContainer,Allocator)->flat_multiset<typenameKeyContainer::value_type,less<typenameKeyContainer::value_type>,KeyContainer>;template<classKeyContainer,classCompare,classAllocator>flat_multiset(KeyContainer,Compare,Allocator)->flat_multiset<typenameKeyContainer::value_type,Compare,KeyContainer>;template<classKeyContainer,classCompare=less<typenameKeyContainer::value_type>>flat_multiset(sorted_equivalent_t,KeyContainer,Compare=Compare())->flat_multiset<typenameKeyContainer::value_type,Compare,KeyContainer>;template<classKeyContainer,classAllocator>flat_multiset(sorted_equivalent_t,KeyContainer,Allocator)->flat_multiset<typenameKeyContainer::value_type,less<typenameKeyContainer::value_type>,KeyContainer>;template<classKeyContainer,classCompare,classAllocator>flat_multiset(sorted_equivalent_t,KeyContainer,Compare,Allocator)->flat_multiset<typenameKeyContainer::value_type,Compare,KeyContainer>;template<classInputIter,classCompare=less</*iter-value-type*/<InputIter>>>flat_multiset(InputIter,InputIter,Compare=Compare())->flat_multiset</*iter-value-type*/<InputIter>,Compare>;template<classInputIter,classCompare=less</*iter-value-type*/<InputIter>>>flat_multiset(sorted_equivalent_t,InputIter,InputIter,Compare=Compare())->flat_multiset</*iter-value-type*/<InputIter>,Compare>;template<ranges::input_rangeR,classCompare=less<ranges::range_value_t<R>>,classAllocator=allocator<ranges::range_value_t<R>>>flat_multiset(from_range_t,R&&,Compare=Compare(),Allocator=Allocator())->flat_multiset<ranges::range_value_t<R>,Compare,vector<ranges::range_value_t<R>,/*alloc-rebind*/<Allocator,ranges::range_value_t<R>>>>;template<ranges::input_rangeR,classAllocator>flat_multiset(from_range_t,R&&,Allocator)->flat_multiset<ranges::range_value_t<R>,less<ranges::range_value_t<R>>,vector<ranges::range_value_t<R>,/*alloc-rebind*/<Allocator,ranges::range_value_t<R>>>>;template<classKey,classCompare=less<Key>>flat_multiset(initializer_list<Key>,Compare=Compare())->flat_multiset<Key,Compare>;template<classKey,classCompare=less<Key>>flat_multiset(sorted_equivalent_t,initializer_list<Key>,Compare=Compare())->flat_multiset<Key,Compare>;template<classKey,classCompare,classKeyContainer,classAllocator>structuses_allocator<flat_multiset<Key,Compare,KeyContainer>,Allocator>:bool_constant<uses_allocator_v<KeyContainer,Allocator>>{};}References
C++23 standard (ISO/IEC 14882:2024):
24.6.5 Header <flat_set> synopsis [flat.set.syn]
24.6.11.2 Definition [flat.set.defn]
24.6.12.2 Definition [flat.multiset.defn]