(C++17) | ||||
| Sequence | ||||
(C++11) | ||||
(C++26) | ||||
(C++26) | ||||
(C++11) | ||||
| Associative | ||||
| Unordered associative | ||||
(C++11) | ||||
(C++11) | ||||
(C++11) | ||||
(C++11) | ||||
| Adaptors | ||||
(C++23) | ||||
(C++23) | ||||
(C++23) | ||||
(C++23) | ||||
| Views | ||||
(C++20) | ||||
(C++23) | ||||
| Tables | ||||
| Iterator invalidation | ||||
| Member function table | ||||
| Non-member function table |
| Member functions | ||||||||||||
| ||||||||||||
| Non-member functions | ||||||||||||
| ||||||||||||
| Deduction guides(C++17) | ||||||||||||
| (1) | ||
multiset(); | (until C++11) | |
multiset(): multiset(Compare()){} | (since C++11) (constexpr since C++26) | |
explicit multiset(const Compare& comp, const Allocator& alloc= Allocator()); | (2) | (constexpr since C++26) |
explicit multiset(const Allocator& alloc); | (3) | (since C++11) (constexpr since C++26) |
template<class InputIt> multiset( InputIt first, InputIt last, | (4) | (constexpr since C++26) |
template<class InputIt> multiset( InputIt first, InputIt last, | (5) | (since C++14) (constexpr since C++26) |
multiset(const multiset& other); | (6) | (constexpr since C++26) |
multiset(const multiset& other,const Allocator& alloc); | (7) | (since C++11) (constexpr since C++26) |
multiset( multiset&& other); | (8) | (since C++11) (constexpr since C++26) |
multiset( multiset&& other,const Allocator& alloc); | (9) | (since C++11) (constexpr since C++26) |
multiset(std::initializer_list<value_type> init, const Compare& comp= Compare(), | (10) | (since C++11) (constexpr since C++26) |
multiset(std::initializer_list<value_type> init, const Allocator& alloc) | (11) | (since C++14) (constexpr since C++26) |
template<container-compatible-range<value_type> R> multiset(std::from_range_t, R&& rg, | (12) | (since C++23) (constexpr since C++26) |
template<container-compatible-range<value_type> R> multiset(std::from_range_t, R&& rg, | (13) | (since C++23) (constexpr since C++26) |
Constructs new container from a variety of data sources and optionally using user supplied allocatoralloc or comparison function objectcomp.
[first, last).[first, last) is not avalid range, the behavior is undefined.Ifalloc is not provided, allocator is obtained by callingstd::allocator_traits<allocator_type>:: | (since C++11) |
Duringclass template argument deduction, only the first argument contributes to the deduction of the container's | (since C++23) |
Duringclass template argument deduction, only the first argument contributes to the deduction of the container's | (since C++23) |
Contents |
| alloc | - | allocator to use for all memory allocations of this container |
| comp | - | comparison function object to use for all comparisons of keys |
| first, last | - | the pair of iterators defining the sourcerange of elements to copy |
| other | - | another container to be used as source to initialize the elements of the container with |
| init | - | initializer list to initialize the elements of the container with |
| rg | - | acontainer compatible range, that is, aninput_range whose elements are convertible tovalue_type |
| Type requirements | ||
-InputIt must meet the requirements ofLegacyInputIterator. | ||
-Compare must meet the requirements ofCompare. | ||
-Allocator must meet the requirements ofAllocator. | ||
[first, last) is already sorted byvalue_comp().Calls toAllocator::allocate may throw.
After container move construction (overload(8,9)), references, pointers, and iterators (other than the end iterator) toother remain valid, but refer to elements that are now in*this. The current standard makes this guarantee via the blanket statement in[container.reqmts]/67, and a more direct guarantee is under consideration viaLWG issue 2321.
Although not formally required until C++23, some implementations has already put the template parameterAllocator intonon-deduced contexts in earlier modes.
| Feature-test macro | Value | Std | Feature |
|---|---|---|---|
__cpp_lib_containers_ranges | 202202L | (C++23) | Ranges-aware construction and insertion; overloads(12,13) |
#include <iostream>#include <set>#include <string_view> template<typename T>void println(conststd::string_view name,conststd::multiset<T>& ms){std::cout<< name<<": ";for(constauto& element: ms)std::cout<< element<<' ';std::cout<<'\n';} int main(){// (1) Default constructorstd::multiset<int> a; a.insert(4); a.insert(3); a.insert(2); a.insert(1); println("a", a); // (4) Range constructorstd::multiset<int> b(a.begin(), a.find(3)); println("b", b); // (6) Copy constructorstd::multiset<int> c(a); println("c", c); // (8) Move constructorstd::multiset<int> d(std::move(a)); println("d", d); // (10) Initializer list constructorstd::multiset<int> e{3,2,1,2,4,7,3}; println("e", e); // (12) Range constructorconstauto w={"α","β","γ","δ","δ","γ","β","α"};#if __cpp_lib_containers_rangesstd::multiset<std::string> f(std::from_range, w);// overload (12)#elsestd::multiset<std::string> f(w.begin(), w.end());// fallback to (4)#endif println("f", f);}
Output:
a: 1 2 3 4b: 1 2c: 1 2 3 4d: 1 2 3 4e: 1 2 2 3 3 4 7f: α α β β γ γ δ δ
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| LWG 2076 | C++11 | overload(4) conditionally requiredKey to beCopyInsertable into*this | not required |
| LWG 2193 | C++11 | the default constructor was explicit | made non-explicit |
| assigns values to the container (public member function)[edit] |