CoreComponents 4.0.0
A Modern C++ Toolkit
Loading...
Searching...
No Matches
MultiMap< K, T, O > Class Template Reference

Multi-map data container. More...

#include <cc/MultiMap>

Public Types

using Key = K
 Key type.
using Value = T
 Value type.
using Item = KeyValue<K, 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 iterator = Iterator<blist::Vector<Item>>
 Value iterator.
using const_iterator = Iterator<const blist::Vector<Item>>
 Readonly value iterator.
using reverse_iterator = ReverseIterator<blist::Vector<Item>>
 Reverse value iterator.
using const_reverse_iterator = ReverseIterator<const blist::Vector<Item>>
 Readonly reverse value iterator.
iterator begin ()
 Return iterator pointing to the first item (if any)
iterator end ()
 Return iterator pointing behind the last item
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
reverse_iterator rbegin ()
 Return reverse iterator pointing to the last item (if any)
reverse_iterator rend ()
 Return reverse iterator pointing before the first 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

 MultiMap ()=default
 Construct an empty multi-map.
 MultiMap (const MultiMap &other)=default
 Construct a copy of other.
 MultiMap (std::initializer_list< Item > items)
 Construct with initial items.
 MultiMap (MultiMap &&other)
 Take over the right-side multi-map other.
MultiMap & operator= (const MultiMap &other)=default
 Assign multi-map other.
MultiMap & operator= (MultiMap &&other)
 Take over the right-side multi-map other.
List< Item > toList () 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-map.
long size () const
 Get the number of items stored in the multi-map.
bool has (long i) const
 Check if i is a valid index.
 operator bool () const
 Check if this multi-map is non-empty.
long operator+ () const
 Get the number of items stored in the multi-map.
const Item & at (Locator pos) const
 Get constant reference to the item at position pos.
const Item & at (long index) const
 Get constant reference to the item at index.
Item & at (Locator pos)
 Get reference to the item at position pos.
Item & at (long index)
 Get reference to the item at index.
const Item & operator[] (long index) const
 Get constant reference to the item at index.
const Item & first () const
 Get constant reference to first item.
const Item & last () 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 Item & min () const
 Get constant reference to the first item.
const Item & max () const
 Get constant reference to the last item.

Multi-Map Operations

template<class Search = FindFirst, class Pattern>
bool find (const Pattern &pattern, Out< Locator > pos=None{}) const
 Search for a key in the multi-map.
template<class Pattern>
bool contains (const Pattern &pattern) const
 Convenience function to check if the map contains pattern.
template<class Pattern>
Locator lowerBound (const Pattern &pattern) const
 Convenience function to find the start of a search range.
template<class Pattern>
Locator upperBound (const Pattern &pattern) const
 Convenience function to find the end of a search range.
void insert (const Key &key, const Value &value)
 Insert a new key-value pair.
long remove (const Key &key)
 Remove all matching keys.

Positional Operations

void removeAt (Locator &pos)
 Remove item at position pos (and increment pos).
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 K, class T = K, class O = DefaultOrder>
class cc::MultiMap< K, T, O >

Multi-map data container.

Template Parameters
KKey type
TValue type
OSearch order

Member Typedef Documentation

◆ Key

template<class K, class T = K, class O = DefaultOrder>
using Key = K

Key type.

◆ Value

template<class K, class T = K, class O = DefaultOrder>
using Value = T

Value type.

◆ Item

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

Item type.

◆ Order

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

Search order.

◆ value_type

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

Item value type.

◆ size_type

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

Type of the container capacity.

◆ iterator

template<class K, class T = K, class O = DefaultOrder>
using iterator = Iterator<blist::Vector<Item>>

Value iterator.

◆ const_iterator

template<class K, class T = K, class O = DefaultOrder>
using const_iterator = Iterator<const blist::Vector<Item>>

Readonly value iterator.

◆ reverse_iterator

template<class K, class T = K, class O = DefaultOrder>
using reverse_iterator = ReverseIterator<blist::Vector<Item>>

Reverse value iterator.

◆ const_reverse_iterator

template<class K, class T = K, class O = DefaultOrder>
using const_reverse_iterator = ReverseIterator<const blist::Vector<Item>>

Readonly reverse value iterator.

Constructor & Destructor Documentation

◆ MultiMap() [1/4]

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

Construct an empty multi-map.

◆ MultiMap() [2/4]

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

Construct a copy of other.

◆ MultiMap() [3/4]

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

Construct with initial items.

◆ MultiMap() [4/4]

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

Take over the right-side multi-map other.

Member Function Documentation

◆ operator=() [1/2]

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

Assign multi-map other.

◆ operator=() [2/2]

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

Take over the right-side multi-map other.

◆ toList()

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

Get corresponding list representation.

◆ head()

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

Get a locator pointing to the first item.

◆ tail()

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

Get a locator pointing to the last item.

◆ from()

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

Get a locator pointing to the item at index.

◆ count()

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

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

◆ size()

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

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

◆ has()

template<class K, class T = K, class O = DefaultOrder>
bool has ( long i) const

Check if i is a valid index.

◆ operator bool()

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

Check if this multi-map is non-empty.

◆ operator+()

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

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

◆ at() [1/4]

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

Get constant reference to the item at position pos.

◆ at() [2/4]

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

Get constant reference to the item at index.

◆ at() [3/4]

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

Get reference to the item at position pos.

◆ at() [4/4]

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

Get reference to the item at index.

◆ operator[]()

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

Get constant reference to the item at index.

◆ first()

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

Get constant reference to first item.

◆ last()

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

Get constant reference to last item.

◆ firstIs()

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

Tell if item is the first item.

◆ lastIs()

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

Tell if item is the last item.

◆ min()

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

Get constant reference to the first item.

◆ max()

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

Get constant reference to the last item.

◆ find()

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

Search for a key in the multi-map.

Template Parameters
Searchsearch strategy (FindFirst, FindLast or FindAny)
Parameters
patternKey search pattern
posReturns the position of the item that was found
Returns
True if key was found

◆ contains()

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

Convenience function to check if the map contains pattern.

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

◆ lowerBound()

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

Convenience function to find the start 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 K, class T = K, class O = DefaultOrder>
template<class Pattern>
Locator upperBound ( const Pattern & pattern) const

Convenience function to find the end 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 K, class T = K, class O = DefaultOrder>
void insert ( const Key & key,
const Value & value )

Insert a new key-value pair.

Parameters
keySearch key
valueNew value
Note
The insertion order of ambiguous keys is maintained.

◆ remove()

template<class K, class T = K, class O = DefaultOrder>
long remove ( const Key & key)

Remove all matching keys.

Parameters
keySearch key
Returns
Number of items removed
Todo
optimize performance

◆ removeAt() [1/2]

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

Remove item at position pos (and increment pos).

◆ removeAt() [2/2]

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

Remove item at index.

◆ forEach()

template<class K, class T = K, 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 gets called for each item

◆ forEachInRange()

template<class K, class T = K, 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)
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 K, class T = K, class O = DefaultOrder>
void deplete ( )

Remove all items.

◆ begin() [1/2]

template<class K, class T = K, class O = DefaultOrder>
iterator begin ( )

Return iterator pointing to the first item (if any)

◆ end() [1/2]

template<class K, class T = K, class O = DefaultOrder>
iterator end ( )

Return iterator pointing behind the last item

◆ begin() [2/2]

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

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

◆ cbegin()

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

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

◆ end() [2/2]

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

Return readonly iterator pointing behind the last item

◆ cend()

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

Return readonly iterator pointing behind the last item

◆ rbegin() [1/2]

template<class K, class T = K, class O = DefaultOrder>
reverse_iterator rbegin ( )

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

◆ rend() [1/2]

template<class K, class T = K, class O = DefaultOrder>
reverse_iterator rend ( )

Return reverse iterator pointing before the first item

◆ rbegin() [2/2]

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

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

◆ crbegin()

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

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

◆ rend() [2/2]

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

Return reverse iterator pointing before the first item

◆ crend()

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

Return reverse iterator pointing before the first item

◆ operator==()

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

Equality operator.