Binary Relations
Three new associative container classes
Loading...
Searching...
No Matches
BinaryRelations::OneToMany< LeftType, RightType > Class Template Reference

#include <BinaryRelations.h>

Classes

class  Iterator
 A range-based-for compatible iterator. More...
 
struct  Pair
 A pair of (left, right) values. More...
 

Public Member Functions

 OneToMany () noexcept
 Default constructor.
 
void insert (const Pair &pair) noexcept
 Insert a pair into the set. The rule for one-to-many is that if the right value is part of an existing pair in the set, that relation will be erased.
 
void insert (const LeftType &left, const RightType &right) noexcept
 Insert a pair into the set. The rule for one-to-many is that if the right value is part of an existing pair in the set, that relation will be erased.
 
void insert (const std::vector< Pair > &pairs) noexcept
 Insert multiple pairs into the set. This is faster than inserting the pairs one by one. The rule for one-to-many is that if the right value is part of an existing pair in the set, that pair will be erased.
 
void erase (const Pair &pair) noexcept
 Erase a pair from the set. If there is no matching pair in the set, nothing happens.
 
void erase (const LeftType &left, const RightType &right) noexcept
 Erase a pair from the set. If there is no matching pair in the set, nothing happens.
 
void eraseLeft (const LeftType &left) noexcept
 Erase all pairs with the given left value. If there is no matching pair in the set, nothing happens.
 
void eraseRight (const RightType &right) noexcept
 Erase the pair with the given right value. If there is no matching pair in the set, nothing happens.
 
void erase (const std::vector< Pair > &pairs) noexcept
 Erase multiple pairs from the set. This is faster than erasing the pairs one by one.
 
void clear () noexcept
 Erase all pairs from the set.
 
bool contains (const Pair &pair) const noexcept
 Test whether a given pair is in the set.
 
bool contains (const LeftType &left, const RightType &right) const noexcept
 Test whether a given pair is in the set.
 
bool containsLeft (const LeftType &left) const noexcept
 Test whether any pair in the set has this left value.
 
bool containsRight (const RightType &right) const noexcept
 Test whether any pair in the set has this right value.
 
const std::vector< RightType > * findRight (const LeftType &left) const noexcept
 Find all right values that are paired with this left value. If nothing is found, you will get an empty array. This works well with range-based-for.
 
LeftType findLeft (const RightType &right, const LeftType &notFoundValue) const noexcept
 Find the single left value that is paired with this right value. If nothing is found, you will get the notFoundValue.
 
int countLeft () const noexcept
 Count the number of left values in the set.
 
int countRight () const noexcept
 Count the number of right values in the set.
 
int count () const noexcept
 Count the number of pairs in the set.
 
UnorderedMapHelper< LeftType, std::vector< RightType > * > allLeft () const noexcept
 List all left elements.
 
UnorderedMapHelper< RightType, LeftType > allRight () const noexcept
 List all right elements.
 
Iterator begin () const noexcept
 Required member to get range-based-for.
 
Iterator end () const noexcept
 Required member to get range-based-for.
 

Detailed Description

template<typename LeftType, typename RightType>
class BinaryRelations::OneToMany< LeftType, RightType >

A one-to-many set of (left, right) pairs. The left side can have any number of right counterparts. The right side can only be in a pair with one left side.

one-to-many

Definition at line 211 of file BinaryRelations.h.

Constructor & Destructor Documentation

◆ OneToMany()

template<typename LeftType , typename RightType >
BinaryRelations::OneToMany< LeftType, RightType >::OneToMany ( )
inlinenoexcept

Default constructor.

Definition at line 236 of file BinaryRelations.h.

Member Function Documentation

◆ allLeft()

template<typename LeftType , typename RightType >
UnorderedMapHelper< LeftType, std::vector< RightType > * > BinaryRelations::OneToMany< LeftType, RightType >::allLeft ( ) const
inlinenoexcept

List all left elements.

Returns
A helper object to iterate over left elements using range-based-for.

Definition at line 612 of file BinaryRelations.h.

◆ allRight()

template<typename LeftType , typename RightType >
UnorderedMapHelper< RightType, LeftType > BinaryRelations::OneToMany< LeftType, RightType >::allRight ( ) const
inlinenoexcept

List all right elements.

Returns
A helper object to iterate over right elements using range-based-for.

Definition at line 621 of file BinaryRelations.h.

◆ begin()

template<typename LeftType , typename RightType >
Iterator BinaryRelations::OneToMany< LeftType, RightType >::begin ( ) const
inlinenoexcept

Required member to get range-based-for.

Returns
an Iterator set to the first pair in the set.

Definition at line 674 of file BinaryRelations.h.

◆ clear()

template<typename LeftType , typename RightType >
void BinaryRelations::OneToMany< LeftType, RightType >::clear ( )
inlinenoexcept

Erase all pairs from the set.

Definition at line 505 of file BinaryRelations.h.

◆ contains() [1/2]

template<typename LeftType , typename RightType >
bool BinaryRelations::OneToMany< LeftType, RightType >::contains ( const LeftType & left,
const RightType & right ) const
inlinenoexcept

Test whether a given pair is in the set.

Parameters
leftThe left side of the pair to look for.
rightThe right side of the pair to look for.

Definition at line 525 of file BinaryRelations.h.

◆ contains() [2/2]

template<typename LeftType , typename RightType >
bool BinaryRelations::OneToMany< LeftType, RightType >::contains ( const Pair & pair) const
inlinenoexcept

Test whether a given pair is in the set.

Parameters
pairThe pair to look for.

Definition at line 515 of file BinaryRelations.h.

◆ containsLeft()

template<typename LeftType , typename RightType >
bool BinaryRelations::OneToMany< LeftType, RightType >::containsLeft ( const LeftType & left) const
inlinenoexcept

Test whether any pair in the set has this left value.

Parameters
leftThe left side of the pair to look for.

Definition at line 535 of file BinaryRelations.h.

◆ containsRight()

template<typename LeftType , typename RightType >
bool BinaryRelations::OneToMany< LeftType, RightType >::containsRight ( const RightType & right) const
inlinenoexcept

Test whether any pair in the set has this right value.

Parameters
rightThe right side of the pair to look for.

Definition at line 544 of file BinaryRelations.h.

◆ count()

template<typename LeftType , typename RightType >
int BinaryRelations::OneToMany< LeftType, RightType >::count ( ) const
inlinenoexcept

Count the number of pairs in the set.

Returns
The number of pairs in the set.

Definition at line 603 of file BinaryRelations.h.

◆ countLeft()

template<typename LeftType , typename RightType >
int BinaryRelations::OneToMany< LeftType, RightType >::countLeft ( ) const
inlinenoexcept

Count the number of left values in the set.

Returns
The number of left values in the set.

Definition at line 585 of file BinaryRelations.h.

◆ countRight()

template<typename LeftType , typename RightType >
int BinaryRelations::OneToMany< LeftType, RightType >::countRight ( ) const
inlinenoexcept

Count the number of right values in the set.

Returns
The number of right values in the set.

Definition at line 594 of file BinaryRelations.h.

◆ end()

template<typename LeftType , typename RightType >
Iterator BinaryRelations::OneToMany< LeftType, RightType >::end ( ) const
inlinenoexcept

Required member to get range-based-for.

Returns
an Iterator set to one after the last pair in the set.

Definition at line 691 of file BinaryRelations.h.

◆ erase() [1/3]

template<typename LeftType , typename RightType >
void BinaryRelations::OneToMany< LeftType, RightType >::erase ( const LeftType & left,
const RightType & right )
inlinenoexcept

Erase a pair from the set. If there is no matching pair in the set, nothing happens.

Parameters
leftThe left side of the pair to erase.
rightThe right side of the pair to erase.

Definition at line 389 of file BinaryRelations.h.

◆ erase() [2/3]

template<typename LeftType , typename RightType >
void BinaryRelations::OneToMany< LeftType, RightType >::erase ( const Pair & pair)
inlinenoexcept

Erase a pair from the set. If there is no matching pair in the set, nothing happens.

Parameters
pairThe pair to erase.

Definition at line 378 of file BinaryRelations.h.

◆ erase() [3/3]

template<typename LeftType , typename RightType >
void BinaryRelations::OneToMany< LeftType, RightType >::erase ( const std::vector< Pair > & pairs)
inlinenoexcept

Erase multiple pairs from the set. This is faster than erasing the pairs one by one.

Parameters
pairsThe pairs to erase.

Definition at line 453 of file BinaryRelations.h.

◆ eraseLeft()

template<typename LeftType , typename RightType >
void BinaryRelations::OneToMany< LeftType, RightType >::eraseLeft ( const LeftType & left)
inlinenoexcept

Erase all pairs with the given left value. If there is no matching pair in the set, nothing happens.

Parameters
leftThe left side of the pairs to erase.

Definition at line 418 of file BinaryRelations.h.

◆ eraseRight()

template<typename LeftType , typename RightType >
void BinaryRelations::OneToMany< LeftType, RightType >::eraseRight ( const RightType & right)
inlinenoexcept

Erase the pair with the given right value. If there is no matching pair in the set, nothing happens.

Parameters
rightThe right side of the pairs to erase.

Definition at line 440 of file BinaryRelations.h.

◆ findLeft()

template<typename LeftType , typename RightType >
LeftType BinaryRelations::OneToMany< LeftType, RightType >::findLeft ( const RightType & right,
const LeftType & notFoundValue ) const
inlinenoexcept

Find the single left value that is paired with this right value. If nothing is found, you will get the notFoundValue.

Parameters
rightThe right side of the pair to look for.
notFoundValueThe value to return if no matching pair is found.
Returns
The singular left value.

Definition at line 572 of file BinaryRelations.h.

◆ findRight()

template<typename LeftType , typename RightType >
const std::vector< RightType > * BinaryRelations::OneToMany< LeftType, RightType >::findRight ( const LeftType & left) const
inlinenoexcept

Find all right values that are paired with this left value. If nothing is found, you will get an empty array. This works well with range-based-for.

Parameters
leftThe left side of the pair to look for.
Returns
The vector of right values.

Definition at line 556 of file BinaryRelations.h.

◆ insert() [1/3]

template<typename LeftType , typename RightType >
void BinaryRelations::OneToMany< LeftType, RightType >::insert ( const LeftType & left,
const RightType & right )
inlinenoexcept

Insert a pair into the set. The rule for one-to-many is that if the right value is part of an existing pair in the set, that relation will be erased.

Parameters
leftThe left side of the pair to add.
rightThe right side of the pair to add.

Definition at line 255 of file BinaryRelations.h.

◆ insert() [2/3]

template<typename LeftType , typename RightType >
void BinaryRelations::OneToMany< LeftType, RightType >::insert ( const Pair & pair)
inlinenoexcept

Insert a pair into the set. The rule for one-to-many is that if the right value is part of an existing pair in the set, that relation will be erased.

Parameters
pairThe pair to insert.

Definition at line 244 of file BinaryRelations.h.

◆ insert() [3/3]

template<typename LeftType , typename RightType >
void BinaryRelations::OneToMany< LeftType, RightType >::insert ( const std::vector< Pair > & pairs)
inlinenoexcept

Insert multiple pairs into the set. This is faster than inserting the pairs one by one. The rule for one-to-many is that if the right value is part of an existing pair in the set, that pair will be erased.

Parameters
pairsThe pairs to add.

Definition at line 283 of file BinaryRelations.h.


The documentation for this class was generated from the following file: