176 using KeyType = KEY_TYPE;
181 using key_type = KEY_TYPE;
189 static_assert (IKeyedCollection_KeyExctractor<KeyExtractorType, T, KEY_TYPE>);
197 static_assert (IEqualsComparer<KeyEqualityComparerType, key_type>);
240 template <IEqualsComparer<KEY_TYPE> KEY_EQUALS_COMPARER = equal_to<KEY_TYPE>>
241 KeyedCollection (KEY_EQUALS_COMPARER&& keyComparer = KEY_EQUALS_COMPARER{})
245 template <IEqualsComparer<KEY_TYPE> KEY_EQUALS_COMPARER = equal_to<KEY_TYPE>>
246 KeyedCollection (const KeyExtractorType& keyExtractor, KEY_EQUALS_COMPARER&& keyComparer = KEY_EQUALS_COMPARER{});
247 KeyedCollection (
const initializer_list<value_type>& src);
248 template <IIterableOfTo<T> ITERABLE_OF_ADDABLE, IEqualsComparer<KEY_TYPE> KEY_EQUALS_COMPARER = equal_to<KEY_TYPE>>
249 KeyedCollection (ITERABLE_OF_ADDABLE&& src)
250 requires (IKeyedCollection_ExtractorCanBeDefaulted<T, KEY_TYPE, TRAITS> and
251 not derived_from<remove_cvref_t<ITERABLE_OF_ADDABLE>, KeyedCollection<T, KEY_TYPE, TRAITS>>)
252#
if qCompilerAndStdLib_template_Requires_templateDeclarationMatchesOutOfLine2_Buggy
255 AddAll (forward<ITERABLE_OF_ADDABLE> (src));
256 _AssertRepValidType ();
260 template <IIterableOfTo<T> ITERABLE_OF_ADDABLE, IEqualsComparer<KEY_TYPE> KEY_EQUALS_COMPARER = equal_to<KEY_TYPE>>
261 KeyedCollection (KEY_EQUALS_COMPARER&& keyComparer, ITERABLE_OF_ADDABLE&& src)
262 requires (IKeyedCollection_ExtractorCanBeDefaulted<T, KEY_TYPE, TRAITS> and
263 not derived_from<remove_cvref_t<ITERABLE_OF_ADDABLE>, KeyedCollection<T, KEY_TYPE, TRAITS>>)
264#
if qCompilerAndStdLib_template_Requires_templateDeclarationMatchesOutOfLine2_Buggy
265 : KeyedCollection{KeyExtractorType{}, forward<KEY_EQUALS_COMPARER> (keyComparer)}
268 _AssertRepValidType ();
272 template <IEqualsComparer<KEY_TYPE> KEY_EQUALS_COMPARER, IIterableOfTo<T> ITERABLE_OF_ADDABLE>
273 KeyedCollection (
const KeyExtractorType& keyExtractor, KEY_EQUALS_COMPARER&& keyComparer, ITERABLE_OF_ADDABLE&& src);
274 template <IIterableOfTo<T> ITERABLE_OF_ADDABLE>
275 KeyedCollection (
const KeyExtractorType& keyExtractor, ITERABLE_OF_ADDABLE&& src)
276 requires (IEqualsComparer<KEY_TYPE, equal_to<KEY_TYPE>>);
277 template <IInputIterator<T> ITERATOR_OF_ADDABLE, sentinel_for<remove_cvref_t<ITERATOR_OF_ADDABLE>> ITERATOR_OF_ADDABLE2,
278 IEqualsComparer<KEY_TYPE> KEY_EQUALS_COMPARER = equal_to<KEY_TYPE>>
279 KeyedCollection (ITERATOR_OF_ADDABLE&& start, ITERATOR_OF_ADDABLE2&& end)
280 requires (IKeyedCollection_ExtractorCanBeDefaulted<T, KEY_TYPE, TRAITS>);
281 template <IInputIterator<T> ITERATOR_OF_ADDABLE, sentinel_for<remove_cvref_t<ITERATOR_OF_ADDABLE>> ITERATOR_OF_ADDABLE2,
282 IEqualsComparer<KEY_TYPE> KEY_EQUALS_COMPARER = equal_to<KEY_TYPE>>
283 KeyedCollection (KEY_EQUALS_COMPARER&& keyComparer, ITERATOR_OF_ADDABLE&& start, ITERATOR_OF_ADDABLE2&& end)
284 requires (IKeyedCollection_ExtractorCanBeDefaulted<T, KEY_TYPE, TRAITS>);
285 template <IEqualsComparer<KEY_TYPE> KEY_EQUALS_COMPARER, IInputIterator<T> ITERATOR_OF_ADDABLE, sentinel_for<remove_cvref_t<ITERATOR_OF_ADDABLE>> ITERATOR_OF_ADDABLE2>
286 KeyedCollection (
const KeyExtractorType& keyExtractor, KEY_EQUALS_COMPARER&& keyComparer, ITERATOR_OF_ADDABLE&& start,
287 ITERATOR_OF_ADDABLE2&& end);
290 explicit KeyedCollection (shared_ptr<_IRep>&& rep)
noexcept;
291 explicit KeyedCollection (
const shared_ptr<_IRep>& rep)
noexcept;
296 nonvirtual KeyedCollection& operator= (KeyedCollection&&) =
default;
297 nonvirtual KeyedCollection& operator= (
const KeyedCollection&) =
default;
303 nonvirtual KeyExtractorType GetKeyExtractor ()
const;
311 nonvirtual KeyEqualityComparerType GetKeyEqualityComparer ()
const;
336 nonvirtual Iterable<KeyType> Keys ()
const;
342 nonvirtual
bool Contains (ArgByValueType<KeyType> item)
const;
343 nonvirtual
bool Contains (ArgByValueType<value_type> item)
const;
350 nonvirtual optional<value_type> Lookup (ArgByValueType<KeyType> key)
const;
351 nonvirtual
bool Lookup (ArgByValueType<KeyType> key, optional<value_type>* item)
const;
352 nonvirtual
bool Lookup (ArgByValueType<KeyType> key, value_type* item)
const;
353 nonvirtual
bool Lookup (ArgByValueType<KeyType> key, nullptr_t)
const;
359 template <
typename THROW_IF_MISSING>
368 nonvirtual
value_type LookupValue (ArgByValueType<KeyType> key, ArgByValueType<value_type> defaultValue =
value_type{})
const;
386 nonvirtual
bool Add (ArgByValueType<value_type> item);
396 template <IInputIterator<T> ITERATOR_OF_ADDABLE, sentinel_for<remove_cvref_t<ITERATOR_OF_ADDABLE>> ITERATOR_OF_ADDABLE2>
397 nonvirtual
unsigned int AddAll (ITERATOR_OF_ADDABLE&& start, ITERATOR_OF_ADDABLE2&& end);
398 template <IIterableOfTo<T> ITERABLE_OF_ADDABLE>
399 nonvirtual
unsigned int AddAll (ITERABLE_OF_ADDABLE&& items);
412 nonvirtual
void Remove (ArgByValueType<KeyType> item);
413 nonvirtual
void Remove (ArgByValueType<value_type> item);
435 nonvirtual
bool RemoveIf (ArgByValueType<KeyType> item);
436 nonvirtual
bool RemoveIf (ArgByValueType<value_type> item);
448 template <IInputIterator<T> ITERATOR_OF_ADDABLE>
449 nonvirtual
size_t RemoveAll (ITERATOR_OF_ADDABLE&& start, ITERATOR_OF_ADDABLE&& end);
450 template <IIterableOfTo<T> ITERABLE_OF_ADDABLE>
451 nonvirtual
size_t RemoveAll (
const ITERABLE_OF_ADDABLE& s);
452 nonvirtual
void RemoveAll ();
453 template <predicate<T> PREDICATE>
454 nonvirtual
size_t RemoveAll (PREDICATE&& p);
460 template <
typename RESULT_CONTAINER = KeyedCollection<T, KEY_TYPE, TRAITS>, invocable<T> ELEMENT_MAPPER>
461 nonvirtual RESULT_CONTAINER
Map (ELEMENT_MAPPER&& elementMapper)
const
462 requires (convertible_to<invoke_result_t<ELEMENT_MAPPER, T>,
typename RESULT_CONTAINER::value_type> or
463 convertible_to<invoke_result_t<ELEMENT_MAPPER, T>, optional<typename RESULT_CONTAINER::value_type>>);
473 template <derived_from<Iterable<T>> RESULT_CONTAINER = KeyedCollection<T, KEY_TYPE, TRAITS>, predicate<T> INCLUDE_PREDICATE>
474 nonvirtual RESULT_CONTAINER
Where (INCLUDE_PREDICATE&& includeIfTrue)
const;
494 nonvirtual
KeyedCollection& operator+= (ArgByValueType<value_type> item);
505 nonvirtual
KeyedCollection& operator-= (ArgByValueType<value_type> item);
514 nonvirtual
void clear ();
522 nonvirtual
void erase (ArgByValueType<value_type> item);
538 nonvirtual tuple<_IRep*, Iterator<value_type>> _GetWritableRepAndPatchAssociatedIterator (
const Iterator<value_type>& i);
543 template <
typename T2>
544 using _SafeReadRepAccessor =
typename inherited::template _SafeReadRepAccessor<T2>;
549 template <
typename T2>
550 using _SafeReadWriteRepAccessor =
typename inherited::template _SafeReadWriteRepAccessor<T2>;
553 nonvirtual
void _AssertRepValidType ()
const;