141 using CounterType =
typename TraitsType::CounterType;
150 static_assert (same_as<typename TRAITS::CountedValueType, value_type>);
162 static_assert (IEqualsComparer<ElementEqualityComparerType, T>);
193 requires (IEqualsComparer<equal_to<T>, T>);
194 template <IEqualsComparer<T> EQUALS_COMPARER>
195 explicit MultiSet (EQUALS_COMPARER&& equalsComparer);
198 MultiSet (const initializer_list<T>& src)
199 requires (IEqualsComparer<equal_to<T>, T>);
200 template <IEqualsComparer<T> EQUALS_COMPARER>
201 MultiSet (EQUALS_COMPARER&& equalsComparer, const initializer_list<T>& src);
203 template <IEqualsComparer<T> EQUALS_COMPARER>
205 template <IIterableOfTo<typename TRAITS::CountedValueType> ITERABLE_OF_ADDABLE>
206 explicit
MultiSet (ITERABLE_OF_ADDABLE&& src)
207 requires (IEqualsComparer<equal_to<T>, T> and not derived_from<remove_cvref_t<ITERABLE_OF_ADDABLE>,
MultiSet<T, TRAITS>>)
208#if qCompilerAndStdLib_RequiresNotMatchInlineOutOfLineForTemplateClassBeingDefined_Buggy
211 AddAll (forward<ITERABLE_OF_ADDABLE> (src));
212 _AssertRepValidType ();
216 template <IEqualsComparer<T> EQUALS_COMPARER, IIterableOfTo<
typename TRAITS::CountedValueType> ITERABLE_OF_ADDABLE>
217 MultiSet (EQUALS_COMPARER&& equalsComparer, ITERABLE_OF_ADDABLE&& src);
218 template <IInputIterator<
typename TRAITS::CountedValueType> ITERATOR_OF_ADDABLE, sentinel_for<remove_cvref_t<ITERATOR_OF_ADDABLE>> ITERATOR_OF_ADDABLE2>
219 MultiSet (ITERATOR_OF_ADDABLE&& start, ITERATOR_OF_ADDABLE2&& end)
220 requires (IEqualsComparer<equal_to<T>, T>);
221 template <IEqualsComparer<T> EQUALS_COMPARER, IInputIterator<
typename TRAITS::CountedValueType> ITERATOR_OF_ADDABLE, sentinel_for<remove_cvref_t<ITERATOR_OF_ADDABLE>> ITERATOR_OF_ADDABLE2>
222 MultiSet (EQUALS_COMPARER&& equalsComparer, ITERATOR_OF_ADDABLE&& start, ITERATOR_OF_ADDABLE2&& end);
225 explicit MultiSet (shared_ptr<_IRep>&& rep)
noexcept;
226 explicit MultiSet (
const shared_ptr<_IRep>& rep)
noexcept;
229 nonvirtual MultiSet& operator= (MultiSet&&) noexcept = default;
230 nonvirtual MultiSet& operator= (const MultiSet&) = default;
237 nonvirtual
bool Contains (ArgByValueType<T> item) const;
243 nonvirtual
void Add (ArgByValueType<T> item);
244 nonvirtual
void Add (ArgByValueType<T> item, CounterType count);
245 nonvirtual
void Add (const value_type& item);
256 template <IInputIterator<typename TRAITS::CountedValueType> ITERATOR_OF_ADDABLE, sentinel_for<remove_cvref_t<ITERATOR_OF_ADDABLE>> ITERATOR_OF_ADDABLE2>
257 nonvirtual
void AddAll (ITERATOR_OF_ADDABLE&& start, ITERATOR_OF_ADDABLE2&& end);
258 template <IIterableOfTo<typename TRAITS::CountedValueType> ITERABLE_OF_ADDABLE>
259 nonvirtual
void AddAll (ITERABLE_OF_ADDABLE&& items);
279 nonvirtual
void Remove (ArgByValueType<T> item, CounterType count = 1);
290 nonvirtual
size_t RemoveIf (ArgByValueType<T> item, CounterType count = 1);
302 nonvirtual
void RemoveAll ();
303 nonvirtual
size_t RemoveAll (ArgByValueType<T> item);
321 nonvirtual
void SetCount (ArgByValueType<T> i, CounterType newCount);
329 nonvirtual CounterType OccurrencesOf (ArgByValueType<T> item) const;
336 nonvirtual CounterType TotalOccurrences () const;
350 nonvirtual
void clear ();
370 nonvirtual
Iterable<T> Elements () const;
384 nonvirtual
Iterable<T> UniqueElements () const;
402 nonvirtual
Iterable<typename TRAITS::CountedValueType> Top () const;
403 nonvirtual
Iterable<typename TRAITS::CountedValueType> Top (
size_t n) const;
421 nonvirtual
Iterable<T> TopElements () const;
422 nonvirtual
Iterable<T> TopElements (
size_t n) const;
428 template <typename RESULT_CONTAINER =
MultiSet<T, TRAITS>, invocable<T> ELEMENT_MAPPER>
429 nonvirtual RESULT_CONTAINER Map (ELEMENT_MAPPER&& elementMapper) const
430 requires (convertible_to<invoke_result_t<ELEMENT_MAPPER, typename TRAITS::CountedValueType>, typename RESULT_CONTAINER::
value_type> or
431 convertible_to<invoke_result_t<ELEMENT_MAPPER, typename TRAITS::CountedValueType>, optional<typename RESULT_CONTAINER::
value_type>>);
437 template <derived_from<
Iterable<typename TRAITS::CountedValueType>> RESULT_CONTAINER =
MultiSet<T, TRAITS>, predicate<typename TRAITS::CountedValueType> INCLUDE_PREDICATE>
438 nonvirtual RESULT_CONTAINER Where (INCLUDE_PREDICATE&& includeIfTrue) const;
450 nonvirtual
bool operator== (const
MultiSet& rhs) const;
458 nonvirtual
MultiSet& operator+= (ArgByValueType<T> item);
479 template <typename T2>
480 using _SafeReadRepAccessor = typename
inherited::template _SafeReadRepAccessor<T2>;
485 template <typename T2>
486 using _SafeReadWriteRepAccessor = typename
inherited::template _SafeReadWriteRepAccessor<T2>;
489 nonvirtual
void _AssertRepValidType () const;