Binary Relations
Three new associative container classes
Loading...
Searching...
No Matches
BinaryRelations::ManyToMany< 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

 ManyToMany () noexcept
 Default constructor.
 
void insert (const Pair &pair) noexcept
 Insert a pair into the set.
 
void insert (const LeftType &left, const RightType &right) noexcept
 Insert a pair into the set.
 
void insert (const std::vector< Pair > &pairs) noexcept
 Insert multiple pairs into the set. This is faster than inserting the pairs one by one.
 
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
 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.
 
const std::vector< LeftType > * findLeft (const RightType &right) const noexcept
 Find all left values that are paired with this right value. If nothing is found, you will get an empty array. This works well with range-based-for.
 
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, std::vector< 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::ManyToMany< LeftType, RightType >

A many-to-many set of (left, right) pairs.

many-to-many

Definition at line 705 of file BinaryRelations.h.

Constructor & Destructor Documentation

◆ ManyToMany()

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

Default constructor.

Definition at line 732 of file BinaryRelations.h.

Member Function Documentation

◆ allLeft()

template<typename LeftType , typename RightType >
UnorderedMapHelper< LeftType, std::vector< RightType > * > BinaryRelations::ManyToMany< 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 1177 of file BinaryRelations.h.

◆ allRight()

template<typename LeftType , typename RightType >
UnorderedMapHelper< RightType, std::vector< LeftType > * > BinaryRelations::ManyToMany< 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 1186 of file BinaryRelations.h.

◆ begin()

template<typename LeftType , typename RightType >
Iterator BinaryRelations::ManyToMany< 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 1239 of file BinaryRelations.h.

◆ clear()

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

Erase all pairs from the set.

Definition at line 1053 of file BinaryRelations.h.

◆ contains() [1/2]

template<typename LeftType , typename RightType >
bool BinaryRelations::ManyToMany< 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 1073 of file BinaryRelations.h.

◆ contains() [2/2]

template<typename LeftType , typename RightType >
bool BinaryRelations::ManyToMany< 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 1063 of file BinaryRelations.h.

◆ containsLeft()

template<typename LeftType , typename RightType >
bool BinaryRelations::ManyToMany< 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 1100 of file BinaryRelations.h.

◆ containsRight()

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

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

Parameters
rightThe right side of the pair to look for.

Definition at line 1109 of file BinaryRelations.h.

◆ count()

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

Count the number of pairs in the set.

Returns
The number of pairs in the set.

Definition at line 1168 of file BinaryRelations.h.

◆ countLeft()

template<typename LeftType , typename RightType >
int BinaryRelations::ManyToMany< 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 1150 of file BinaryRelations.h.

◆ countRight()

template<typename LeftType , typename RightType >
int BinaryRelations::ManyToMany< 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 1159 of file BinaryRelations.h.

◆ end()

template<typename LeftType , typename RightType >
Iterator BinaryRelations::ManyToMany< 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 1256 of file BinaryRelations.h.

◆ erase() [1/3]

template<typename LeftType , typename RightType >
void BinaryRelations::ManyToMany< 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 885 of file BinaryRelations.h.

◆ erase() [2/3]

template<typename LeftType , typename RightType >
void BinaryRelations::ManyToMany< 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 874 of file BinaryRelations.h.

◆ erase() [3/3]

template<typename LeftType , typename RightType >
void BinaryRelations::ManyToMany< 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 977 of file BinaryRelations.h.

◆ eraseLeft()

template<typename LeftType , typename RightType >
void BinaryRelations::ManyToMany< 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 921 of file BinaryRelations.h.

◆ eraseRight()

template<typename LeftType , typename RightType >
void BinaryRelations::ManyToMany< 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 949 of file BinaryRelations.h.

◆ findLeft()

template<typename LeftType , typename RightType >
const std::vector< LeftType > * BinaryRelations::ManyToMany< LeftType, RightType >::findLeft ( const RightType & right) const
inlinenoexcept

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

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

Definition at line 1137 of file BinaryRelations.h.

◆ findRight()

template<typename LeftType , typename RightType >
const std::vector< RightType > * BinaryRelations::ManyToMany< 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 1121 of file BinaryRelations.h.

◆ insert() [1/3]

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

Insert a pair into the set.

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

Definition at line 750 of file BinaryRelations.h.

◆ insert() [2/3]

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

Insert a pair into the set.

Parameters
pairThe pair to insert.

Definition at line 740 of file BinaryRelations.h.

◆ insert() [3/3]

template<typename LeftType , typename RightType >
void BinaryRelations::ManyToMany< 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.

Parameters
pairsThe pairs to add.

Definition at line 783 of file BinaryRelations.h.


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