125 using DomainType = DOMAIN_TYPE;
130 using RangeType = RANGE_TYPE;
139 static_assert (IEqualsComparer<DomainEqualsCompareFunctionType, DomainType>);
148 static_assert (IEqualsComparer<RangeEqualsCompareFunctionType, RangeType>);
163 requires (IEqualsComparer<equal_to<DOMAIN_TYPE>, DOMAIN_TYPE> and IEqualsComparer<equal_to<RANGE_TYPE>, RANGE_TYPE>);
164 template <IEqualsComparer<DOMAIN_TYPE> DOMAIN_EQUALS_COMPARER, IEqualsComparer<RANGE_TYPE> RANGE_EQUALS_COMPARER>
165 explicit Bijection (DOMAIN_EQUALS_COMPARER&& domainEqualsComparer, RANGE_EQUALS_COMPARER&& rangeEqualsComparer);
166 template <IEqualsComparer<DOMAIN_TYPE> DOMAIN_EQUALS_COMPARER, IEqualsComparer<RANGE_TYPE> RANGE_EQUALS_COMPARER>
168 RANGE_EQUALS_COMPARER&& rangeEqualsComparer);
172 requires (IEqualsComparer<equal_to<DOMAIN_TYPE>, DOMAIN_TYPE> and IEqualsComparer<equal_to<RANGE_TYPE>, RANGE_TYPE>);
173 template <IEqualsComparer<DOMAIN_TYPE> DOMAIN_EQUALS_COMPARER, IEqualsComparer<RANGE_TYPE> RANGE_EQUALS_COMPARER>
174 Bijection (DOMAIN_EQUALS_COMPARER&& domainEqualsComparer, RANGE_EQUALS_COMPARER&& rangeEqualsComparer, const initializer_list<
value_type>& src);
175 template <IIterableOfTo<
KeyValuePair<DOMAIN_TYPE, RANGE_TYPE>> ITERABLE_OF_ADDABLE>
176 explicit
Bijection (ITERABLE_OF_ADDABLE&& src)
177 requires (not derived_from<remove_cvref_t<ITERABLE_OF_ADDABLE>,
Bijection<DOMAIN_TYPE, RANGE_TYPE>>)
178#if qCompilerAndStdLib_RequiresNotMatchInlineOutOfLineForTemplateClassBeingDefined_Buggy
181 AddAll (forward<ITERABLE_OF_ADDABLE> (src));
182 _AssertRepValidType ();
186 template <IEqualsComparer<DOMAIN_TYPE> DOMAIN_EQUALS_COMPARER, IEqualsComparer<RANGE_TYPE> RANGE_EQUALS_COMPARER, IIterableOfTo<KeyValuePair<DOMAIN_TYPE, RANGE_TYPE>> ITERABLE_OF_ADDABLE>
187 Bijection (DOMAIN_EQUALS_COMPARER&& domainEqualsComparer, RANGE_EQUALS_COMPARER&& rangeEqualsComparer, ITERABLE_OF_ADDABLE&& src);
188 template <IInputIterator<KeyValuePair<DOMAIN_TYPE, RANGE_TYPE>> ITERATOR_OF_ADDABLE, sentinel_for<remove_cvref_t<ITERATOR_OF_ADDABLE>> ITERATOR_OF_ADDABLE2>
189 Bijection (ITERATOR_OF_ADDABLE&& start, ITERATOR_OF_ADDABLE2&&
end)
190 requires (IEqualsComparer<equal_to<DOMAIN_TYPE>, DOMAIN_TYPE> and IEqualsComparer<equal_to<RANGE_TYPE>, RANGE_TYPE>);
191 template <IEqualsComparer<DOMAIN_TYPE> DOMAIN_EQUALS_COMPARER, IEqualsComparer<RANGE_TYPE> RANGE_EQUALS_COMPARER,
192 IInputIterator<KeyValuePair<DOMAIN_TYPE, RANGE_TYPE>> ITERATOR_OF_ADDABLE, sentinel_for<remove_cvref_t<ITERATOR_OF_ADDABLE>> ITERATOR_OF_ADDABLE2>
193 Bijection (DOMAIN_EQUALS_COMPARER&& domainEqualsComparer, RANGE_EQUALS_COMPARER&& rangeEqualsComparer, ITERATOR_OF_ADDABLE&& start,
194 ITERATOR_OF_ADDABLE2&&
end);
197 explicit Bijection (shared_ptr<_IRep>&& src)
noexcept;
198 explicit Bijection (
const shared_ptr<_IRep>& src)
noexcept;
240 nonvirtual Iterable<DomainType>
Preimage () const;
266 nonvirtual Iterable<RangeType>
Image () const;
284 nonvirtual optional<RangeType>
Lookup (ArgByValueType<DomainType> key) const;
285 nonvirtual
bool Lookup (ArgByValueType<DomainType> key, optional<RangeType>* item) const;
286 nonvirtual
bool Lookup (ArgByValueType<DomainType> key, RangeType* item) const;
287 nonvirtual
bool Lookup (ArgByValueType<DomainType> key, nullptr_t) const;
297 nonvirtual RangeType
LookupValue (ArgByValueType<DomainType> key, ArgByValueType<RangeType> defaultValue = RangeType ()) const;
313 nonvirtual optional<DomainType>
InverseLookup (ArgByValueType<RangeType> key) const;
314 nonvirtual
bool InverseLookup (ArgByValueType<RangeType> key, optional<DomainType>* item) const;
315 nonvirtual
bool InverseLookup (ArgByValueType<RangeType> key, DomainType* item) const;
316 nonvirtual
bool InverseLookup (ArgByValueType<RangeType> key, nullptr_t) const;
326 nonvirtual DomainType
InverseLookupValue (ArgByValueType<RangeType> key, ArgByValueType<DomainType> defaultValue = DomainType ()) const;
333 nonvirtual Iterable<RangeType>
MapToRange (const Iterable<DomainType>& values) const;
340 nonvirtual Iterable<DomainType>
MapToDomain (const Iterable<RangeType>& values) const;
346 template <typename RESULT_CONTAINER =
Bijection<DOMAIN_TYPE, RANGE_TYPE>, invocable<pair<DOMAIN_TYPE, RANGE_TYPE>> ELEMENT_MAPPER>
347 nonvirtual RESULT_CONTAINER
Map (ELEMENT_MAPPER&& elementMapper) const
348 requires (convertible_to<invoke_result_t<ELEMENT_MAPPER, pair<DOMAIN_TYPE, RANGE_TYPE>>, typename RESULT_CONTAINER::
value_type> or
349 convertible_to<invoke_result_t<ELEMENT_MAPPER, pair<DOMAIN_TYPE, RANGE_TYPE>>, optional<typename RESULT_CONTAINER::
value_type>>);
355 template <derived_from<
Iterable<pair<DOMAIN_TYPE, RANGE_TYPE>>> RESULT_CONTAINER =
Bijection<DOMAIN_TYPE, RANGE_TYPE>, predicate<pair<DOMAIN_TYPE, RANGE_TYPE>> INCLUDE_PREDICATE>
356 nonvirtual RESULT_CONTAINER
Where (INCLUDE_PREDICATE&& includeIfTrue) const;
391 nonvirtual
void Add (ArgByValueType<DomainType> key, ArgByValueType<RangeType> newElt);
392 template <typename ADDABLE_T>
393 nonvirtual
void Add (ADDABLE_T&& p)
394 requires (convertible_to<ADDABLE_T, pair<DOMAIN_TYPE, RANGE_TYPE>> or convertible_to<ADDABLE_T,
KeyValuePair<DOMAIN_TYPE, RANGE_TYPE>>);
402 template <IIterableOfTo<
KeyValuePair<DOMAIN_TYPE, RANGE_TYPE>> CONTAINER_OF_KEYVALUE>
403 nonvirtual
void AddAll (const CONTAINER_OF_KEYVALUE& items);
404 template <IInputIterator<
KeyValuePair<DOMAIN_TYPE, RANGE_TYPE>> COPY_FROM_ITERATOR_KEYVALUE, sentinel_for<remove_cvref_t<COPY_FROM_ITERATOR_KEYVALUE>> COPY_FROM_ITERATOR_KEYVALUE2>
405 nonvirtual
void AddAll (COPY_FROM_ITERATOR_KEYVALUE&& start, COPY_FROM_ITERATOR_KEYVALUE2&&
end);
442 template <predicate<pair<DOMAIN_TYPE, RANGE_TYPE>> PREDICATE>
443 nonvirtual
size_t RemoveAll (PREDICATE&& p);
453 template <typename TARGET_CONTAINER =
Bijection<RangeType, DomainType>>
454 nonvirtual TARGET_CONTAINER Inverse () const;
473 template <typename CONTAINER_PAIR_RANGE_DOMAIN>
474 nonvirtual CONTAINER_PAIR_RANGE_DOMAIN
As () const;
484 nonvirtual
bool operator== (const
Bijection& rhs) const;
492 nonvirtual
void clear ();
507 template <IIterableOfTo<
KeyValuePair<DOMAIN_TYPE, RANGE_TYPE>> ITERABLE_OF_ADDABLE>
508 nonvirtual
Bijection& operator+= (const ITERABLE_OF_ADDABLE& items);
515 template <IIterableOfTo<
KeyValuePair<DOMAIN_TYPE, RANGE_TYPE>> ITERABLE_OF_ADDABLE>
516 nonvirtual
Bijection& operator-= (const ITERABLE_OF_ADDABLE& items);
536 template <typename T2>
537 using _SafeReadRepAccessor = typename
Iterable<
value_type>::template _SafeReadRepAccessor<T2>;
542 template <typename T2>
543 using _SafeReadWriteRepAccessor = typename
inherited::template _SafeReadWriteRepAccessor<T2>;
546 nonvirtual
void _AssertRepValidType () const;
549 nonvirtual [[deprecated ("String Stroika v3.0d1, Name deprecated - use
MapToRange")]]
Iterable<RangeType>
Map (const
Iterable<DomainType>& values)
const
553 nonvirtual [[deprecated (
"String Stroika v3.0d1, Name deprecated - use MapToRange")]]
Iterable<DomainType>