CoreComponents 3.0.0
A Modern C++ Toolkit
Loading...
Searching...
No Matches
MultiSet< T, O > Class Template Reference

Multi-set data container. More...

#include <cc/MultiSet>

Public Types

using Item = T
 Item type.
 
using Order = O
 Search order.
 

Standard Iterators

using value_type = Item
 Item value type.
 
using size_type = long
 Type of the container capacity.
 
using const_iterator = Iterator<const BucketVector<Item>>
 Readonly value iterator.
 
using const_reverse_iterator = ReverseIterator<const BucketVector<Item>>
 Readonly reverse value iterator.
 
const_iterator begin () const
 Return readonly iterator pointing to the first item (if any)
 
const_iterator cbegin () const
 Return readonly iterator pointing to the first item (if any)
 
const_iterator end () const
 Return readonly iterator pointing behind the last item
 
const_iterator cend () const
 Return readonly iterator pointing behind the last item
 
const_reverse_iterator rbegin () const
 Return readonly reverse iterator pointing to the last item (if any)
 
const_reverse_iterator crbegin () const
 Return readonly reverse iterator pointing to the last item (if any)
 
const_reverse_iterator rend () const
 Return reverse iterator pointing before the first item
 
const_reverse_iterator crend () const
 Return reverse iterator pointing before the first item
 

Construction and Assignment

 MultiSet ()=default
 Construct an empty multi-set.
 
 MultiSet (const MultiSet &other)=default
 Construct a copy of other.
 
 MultiSet (std::initializer_list< Item > items)
 Construct with initial items.
 
 MultiSet (MultiSet &&other)
 Take over the right-side multi-set other.
 
MultiSetoperator= (const MultiSet &other)=default
 Assign multi-set other.
 
MultiSetoperator= (MultiSet &&other)
 Take over the right-side multi-set other.
 
List< ItemtoList () const
 Get corresponding list representation.
 

Item Access

Locator head () const
 Get a locator pointing to the first item.
 
Locator tail () const
 Get a locator pointing to the last item.
 
Locator from (long index) const
 Get a locator pointing to the item at index.
 
long count () const
 Get the number of items stored in the multi-set.
 
long size () const
 Get the number of items stored in the multi-set.
 
 operator bool () const
 Check if this multi-set is non-empty.
 
long operator+ () const
 Get the number of items stored in the multi-set.
 
const Itemat (Locator pos) const
 Get constant reference to the item at position pos.
 
const Itemat (long index) const
 Get constant reference to the item at index.
 
template<class Modify >
void modifyAt (Locator pos, Modify modify)
 Modify an item in place
 
template<class Modify >
void modifyAt (long index, Modify modify)
 Modify an item in place
 
const Itemoperator[] (long index) const
 Get constant reference to the item at index.
 
const Itemfirst () const
 Get constant reference to first item.
 
const Itemlast () const
 Get constant reference to last item.
 
bool firstIs (const Item &item) const
 Tell if item is the first item.
 
bool lastIs (const Item &item) const
 Tell if item is the last item.
 
const Itemmin () const
 Get constant reference to the first item.
 
const Itemmax () const
 Get constant reference to the last item.
 

Multi-Set Operations

template<class Search = FindFirst, class Pattern = Item>
bool find (const Pattern &pattern, Out< Locator > pos=None{}) const
 Search for an item in the multi-set.
 
template<class Pattern = Item>
bool contains (const Pattern &pattern) const
 Convenience function to check if the set contains key.
 
template<class Pattern >
Locator lowerBound (const Pattern &pattern) const
 Convenience function to find the lower bound of a search range.
 
template<class Pattern >
Locator upperBound (const Pattern &pattern) const
 Convenience function to find the upper bound of a search range.
 
void insert (const Item &item)
 Add item to the multi-set.
 
long remove (const Item &item)
 Remove all matching items.
 

Positional Operations

void removeAt (Locator &pos)
 Remove item at position pos (and advance pos to the next item)
 
void removeAt (long index)
 Remove item at index.
 

Global Operations

template<class F >
void forEach (F f) const
 Call function f for each item.
 
template<class F , class Pattern >
void forEachInRange (const Pattern &lower, const Pattern &upper, F f) const
 Call function f for each item in range [lower, upper].
 
void deplete ()
 Remove all items.
 

Comparism Operators

template<class Other >
bool operator== (const Other &other) const
 Equality operator.
 

Detailed Description

template<class T, class O = DefaultOrder>
class cc::MultiSet< T, O >

Multi-set data container.

Template Parameters
TItem type
OSearch order

Member Typedef Documentation

◆ Item

template<class T , class O = DefaultOrder>
using Item = T

Item type.

◆ Order

template<class T , class O = DefaultOrder>
using Order = O

Search order.

◆ value_type

template<class T , class O = DefaultOrder>
using value_type = Item

Item value type.

◆ size_type

template<class T , class O = DefaultOrder>
using size_type = long

Type of the container capacity.

◆ const_iterator

template<class T , class O = DefaultOrder>
using const_iterator = Iterator<const BucketVector<Item>>

Readonly value iterator.

◆ const_reverse_iterator

template<class T , class O = DefaultOrder>
using const_reverse_iterator = ReverseIterator<const BucketVector<Item>>

Readonly reverse value iterator.

Constructor & Destructor Documentation

◆ MultiSet() [1/4]

template<class T , class O = DefaultOrder>
MultiSet ( )
default

Construct an empty multi-set.

◆ MultiSet() [2/4]

template<class T , class O = DefaultOrder>
MultiSet ( const MultiSet< T, O > & other)
default

Construct a copy of other.

◆ MultiSet() [3/4]

template<class T , class O = DefaultOrder>
MultiSet ( std::initializer_list< Item > items)

Construct with initial items.

◆ MultiSet() [4/4]

template<class T , class O = DefaultOrder>
MultiSet ( MultiSet< T, O > && other)

Take over the right-side multi-set other.

Member Function Documentation

◆ operator=() [1/2]

template<class T , class O = DefaultOrder>
MultiSet & operator= ( const MultiSet< T, O > & other)
default

Assign multi-set other.

◆ operator=() [2/2]

template<class T , class O = DefaultOrder>
MultiSet & operator= ( MultiSet< T, O > && other)

Take over the right-side multi-set other.

◆ toList()

template<class T , class O = DefaultOrder>
List< Item > toList ( ) const

Get corresponding list representation.

◆ head()

template<class T , class O = DefaultOrder>
Locator head ( ) const

Get a locator pointing to the first item.

◆ tail()

template<class T , class O = DefaultOrder>
Locator tail ( ) const

Get a locator pointing to the last item.

◆ from()

template<class T , class O = DefaultOrder>
Locator from ( long index) const

Get a locator pointing to the item at index.

◆ count()

template<class T , class O = DefaultOrder>
long count ( ) const

Get the number of items stored in the multi-set.

◆ size()

template<class T , class O = DefaultOrder>
long size ( ) const

Get the number of items stored in the multi-set.

◆ operator bool()

template<class T , class O = DefaultOrder>
operator bool ( ) const
explicit

Check if this multi-set is non-empty.

◆ operator+()

template<class T , class O = DefaultOrder>
long operator+ ( ) const

Get the number of items stored in the multi-set.

◆ at() [1/2]

template<class T , class O = DefaultOrder>
const Item & at ( Locator pos) const

Get constant reference to the item at position pos.

◆ at() [2/2]

template<class T , class O = DefaultOrder>
const Item & at ( long index) const

Get constant reference to the item at index.

◆ modifyAt() [1/2]

template<class T , class O = DefaultOrder>
template<class Modify >
void modifyAt ( Locator pos,
Modify modify )

Modify an item in place

Template Parameters
ModifyFunction type (lambda or functor)
Parameters
posPosition of item to modify
modifyFunction of type void(Item &)

◆ modifyAt() [2/2]

template<class T , class O = DefaultOrder>
template<class Modify >
void modifyAt ( long index,
Modify modify )

Modify an item in place

Template Parameters
ModifyFunction type (lambda or functor)
Parameters
indexIndex of item to modify
modifyFunction of type void(Item &)

◆ operator[]()

template<class T , class O = DefaultOrder>
const Item & operator[] ( long index) const

Get constant reference to the item at index.

◆ first()

template<class T , class O = DefaultOrder>
const Item & first ( ) const

Get constant reference to first item.

◆ last()

template<class T , class O = DefaultOrder>
const Item & last ( ) const

Get constant reference to last item.

◆ firstIs()

template<class T , class O = DefaultOrder>
bool firstIs ( const Item & item) const

Tell if item is the first item.

◆ lastIs()

template<class T , class O = DefaultOrder>
bool lastIs ( const Item & item) const

Tell if item is the last item.

◆ min()

template<class T , class O = DefaultOrder>
const Item & min ( ) const

Get constant reference to the first item.

◆ max()

template<class T , class O = DefaultOrder>
const Item & max ( ) const

Get constant reference to the last item.

◆ find()

template<class T , class O = DefaultOrder>
template<class Search = FindFirst, class Pattern = Item>
bool find ( const Pattern & pattern,
Out< Locator > pos = None{} ) const

Search for an item in the multi-set.

Template Parameters
SearchSearch strategy (FindFirst, FindLast or FindAny)
PatternPattern type (must be comparable with Key)
Parameters
patternPattern to search for
posReturns the position of the item that was found
Returns
True if item is found

◆ contains()

template<class T , class O = DefaultOrder>
template<class Pattern = Item>
bool contains ( const Pattern & pattern) const

Convenience function to check if the set contains key.

Template Parameters
PatternPattern type (must be comparable with Key)
Parameters
patternPattern to search for
Returns
True if key was found

◆ lowerBound()

template<class T , class O = DefaultOrder>
template<class Pattern >
Locator lowerBound ( const Pattern & pattern) const

Convenience function to find the lower bound of a search range.

Template Parameters
PatternPattern type (must be comparable with Key)
Parameters
patternPattern to search for
Returns
Locator position
Note
pattern is included in the search range
See also
forEachInRange()

◆ upperBound()

template<class T , class O = DefaultOrder>
template<class Pattern >
Locator upperBound ( const Pattern & pattern) const

Convenience function to find the upper bound of a search range.

Template Parameters
PatternPattern type (must be comparable with Key)
Parameters
patternPattern to search for
Returns
Locator position
Note
pattern is included in the search range
See also
forEachInRange()

◆ insert()

template<class T , class O = DefaultOrder>
void insert ( const Item & item)

Add item to the multi-set.

◆ remove()

template<class T , class O = DefaultOrder>
long remove ( const Item & item)

Remove all matching items.

Parameters
itemItem value to search for
Returns
Number of items removed
Todo
optimize performance

◆ removeAt() [1/2]

template<class T , class O = DefaultOrder>
void removeAt ( Locator & pos)

Remove item at position pos (and advance pos to the next item)

◆ removeAt() [2/2]

template<class T , class O = DefaultOrder>
void removeAt ( long index)

Remove item at index.

◆ forEach()

template<class T , class O = DefaultOrder>
template<class F >
void forEach ( F f) const

Call function f for each item.

Template Parameters
FFunction type (lambda or functor)
Parameters
fUnary function which and gets called for each item

◆ forEachInRange()

template<class T , class O = DefaultOrder>
template<class F , class Pattern >
void forEachInRange ( const Pattern & lower,
const Pattern & upper,
F f ) const

Call function f for each item in range [lower, upper].

Template Parameters
FFunction type (lambda or functor)
PatternPattern type (must be comparable with Key)
Parameters
lowerLower boundary
upperUpper boundary
fUnary function which gets called for each item
Note
lower and upper are included in the iteration range.

◆ deplete()

template<class T , class O = DefaultOrder>
void deplete ( )

Remove all items.

◆ begin()

template<class T , class O = DefaultOrder>
const_iterator begin ( ) const

Return readonly iterator pointing to the first item (if any)

◆ cbegin()

template<class T , class O = DefaultOrder>
const_iterator cbegin ( ) const

Return readonly iterator pointing to the first item (if any)

◆ end()

template<class T , class O = DefaultOrder>
const_iterator end ( ) const

Return readonly iterator pointing behind the last item

◆ cend()

template<class T , class O = DefaultOrder>
const_iterator cend ( ) const

Return readonly iterator pointing behind the last item

◆ rbegin()

template<class T , class O = DefaultOrder>
const_reverse_iterator rbegin ( ) const

Return readonly reverse iterator pointing to the last item (if any)

◆ crbegin()

template<class T , class O = DefaultOrder>
const_reverse_iterator crbegin ( ) const

Return readonly reverse iterator pointing to the last item (if any)

◆ rend()

template<class T , class O = DefaultOrder>
const_reverse_iterator rend ( ) const

Return reverse iterator pointing before the first item

◆ crend()

template<class T , class O = DefaultOrder>
const_reverse_iterator crend ( ) const

Return reverse iterator pointing before the first item

◆ operator==()

template<class T , class O = DefaultOrder>
template<class Other >
bool operator== ( const Other & other) const

Equality operator.