The Gaudi Framework  master (50869dff)
Loading...
Searching...
No Matches
GaudiUtils::VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR > Class Template Reference

A bit modified version of 'Loki::AssocVector' associative vector from Loki library by Andrei Alexandrescu. More...

#include </builds/gaudi/Gaudi/GaudiKernel/include/GaudiKernel/VectorMap.h>

Inheritance diagram for GaudiUtils::VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR >:
Collaboration diagram for GaudiUtils::VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR >:

Classes

struct  _compare_type
 The actual structure used to compare the elements Only "key" is important for comparison. More...

Public Types

typedef KEY key_type
 the actual type of key
typedef VALUE mapped_type
 the actual type of value
typedef KEYCOMPARE key_compare
 comparison of keys
typedef std::pair< key_type, mapped_typevalue_type
 the actual storage item
typedef ALLOCATOR allocator_type
 allocator (could be useful for optimizations)
using reference = typename ALLOCATOR::value_type const&
 the types to conform STL
using const_reference = typename ALLOCATOR::value_type const&
 the types to conform STL
using size_type = typename ALLOCATOR::size_type
 the types to conform STL
using difference_type = typename ALLOCATOR::difference_type
 the types to conform STL
typedef std::vector< value_type, allocator_type_vector
 the actual storage container (no export)
using iterator = typename _vector::const_iterator
 visible const_iterator (exported)
using const_iterator = typename _vector::const_iterator
 visible const_iterator (exported)
typedef std::reverse_iterator< iteratorreverse_iterator
 visible reverse const_iterator (exported)
typedef std::reverse_iterator< const_iteratorconst_reverse_iterator
 visible reverse const_iterator (exported)
typedef std::pair< iterator, iteratoriterators
 visible iterator pait
typedef std::pair< iterator, bool > result_type
 visible iterator pait
typedef _compare_type compare_type
 the actual comparison criteria for valye_type objects

Public Member Functions

iterator begin () const
 "begin" iterator for sequential access (const-only version!)
iterator end () const
 "end" iterator for sequential access (const-only version!)
reverse_iterator rbegin () const
 "rbegin" iterator for sequential access (const-only version!)
reverse_iterator rend () const
 "rend" iterator for sequential access (const-only version!)
void erase (iterator pos)
 erase the element using the iterator
size_type erase (const key_type &key)
 erase the element using the key
template<detail::key_comparable< key_type, key_compare > K>
size_type erase (const K &key)
size_type erase (iterator first, iterator last)
 erase the sequence of elements using the iterators
template<class TYPE>
size_type erase (TYPE first, TYPE last)
 erase the sequence of elements using the sequence of keys
result_type insert (const key_type &key, const mapped_type &mapped)
 insert the (key,value) pair into the container
result_type insert (const value_type &value)
 insert the (key,value) pair into the container
result_type insert (iterator pos, const value_type &value)
 insert the element with some guess about its new position With the right guess the method could be more efficient
result_type insert (iterator pos, key_type key, mapped_type mapped)
 insert the (key,value) pair into the container With the right guess the method could be more efficient
template<class PAIRS>
void insert (PAIRS first, PAIRS last)
 insert the sequence of elements into the container
template<class KEYS, class VALUES>
void insert (KEYS kf, KEYS kl, VALUES vf)
 insert into the container the elements from 2 "parallel" sequences
iterator find (const key_type &key) const
 find the element by key
template<detail::key_comparable< key_type, key_compare > K>
iterator find (const K &key) const
size_type count (const key_type &key) const
 count number of elements with the certain key
template<detail::key_comparable< key_type, key_compare > K>
size_type count (const K &key) const
iterator lower_bound (const key_type &key) const
template<detail::key_comparable< key_type, key_compare > K>
iterator lower_bound (const K &key) const
iterator upper_bound (const key_type &key) const
template<detail::key_comparable< key_type, key_compare > K>
iterator upper_bound (const K &key) const
iterators equal_range (const key_type &key) const
template<detail::key_comparable< key_type, key_compare > K>
iterators equal_range (const K &key) const
bool empty () const
 empty container ?
size_type size () const
 number of elements
size_type max_size () const
 maximal allowed size
void clear ()
 clear the container
void reserve (size_type num)
 reserve the space in the container for at least 'num' elements
void swap (VectorMap &other)
 swap function, which 'swaps' the content of two containers
bool operator== (const VectorMap &other) const
 comparison criteria for containers
auto operator<=> (const VectorMap &other) const
 comparison criteria for containers
bool update (const key_type &key, const mapped_type &mapped)
 forced insertion of the key/mapped pair The method acts like "insert" but it DOES overwrite the existing mapped value.
template<detail::key_comparable< key_type, key_compare > K>
bool update (const K &key, const mapped_type &mapped)
bool update (const value_type &val)
 forced insertion of the key/mapped pair The method acts like "insert" but it DOES overwrite the mapped value.
const mapped_typeoperator() (const key_type &key) const
 access to element by key (const version) there is no container increment for missing keys
template<detail::key_comparable< key_type, key_compare > K>
const mapped_typeoperator() (const K &key) const
const mapped_typeoperator[] (const key_type &key) const
 access to element by key (const version) there is no container increment for missing keys
template<detail::key_comparable< key_type, key_compare > K>
const mapped_typeoperator[] (const K &key) const
const mapped_typeat (const key_type &key) const
 checked access to elements by key throw std::out_of_range exception for non-existing keys
template<detail::key_comparable< key_type, key_compare > K>
const mapped_typeat (const K &key) const
 VectorMap (const allocator_type &alloc=allocator_type())
 default constructor from the the allocator
template<class INPUT>
 VectorMap (INPUT first, INPUT last, const allocator_type &alloc=allocator_type())
 templated constructor from "convertible" sequence
 VectorMap (std::initializer_list< value_type > first, const allocator_type &alloc=allocator_type())
 tconstructor from initializer list
const compare_typecompare () const
 get the comparison criteria itself
const key_comparecompare_key () const
 get the comparison criteria for keys
VectorMapmerge (const VectorMap &right)
 merge two maps
template<class K1, class K2, class K3, class K4>
VectorMapmerge (const VectorMap< K1, K2, K3, K4 > &right)
 merge two maps
const key_typekey_at (const size_t index) const
 useful method for python decoration:
const mapped_typevalue_at (const size_t index) const
 useful method for python decoration:
Public Member Functions inherited from Gaudi::Utils::MapBase
virtual ~MapBase ()

Protected Types

using _iterator = typename _vector::iterator
 the regular iterator (no export)

Protected Member Functions

template<class TYPE1, class TYPE2>
bool compare (const TYPE1 &obj1, const TYPE2 &obj2) const
 compare the objects using the comaprison criteria
_iterator lower_bound (const key_type &key)
 'lower-bound' - non-const version
template<detail::key_comparable< key_type, key_compare > K>
_iterator lower_bound (const K &key)
_iterator iter (iterator p)
 the conversion from 'const' to 'non-const' iterator
iterator iter (_iterator p)
 the conversion from 'non-const' to 'const' iterator
Protected Member Functions inherited from Gaudi::Utils::MapBase
void throw_out_of_range_exception () const
 throw std::out_of_range exception

Private Attributes

_vector m_vct
 the underlying sorted vector of (key,mapped) pairs

Friends

std::ostream & operator<< (std::ostream &str, const VectorMap &)
 printout to ostream - not implemented

Detailed Description

template<typename KEY, typename VALUE, typename KEYCOMPARE = std::less<>, typename ALLOCATOR = std::allocator<std::pair<KEY, VALUE>>>
class GaudiUtils::VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR >

A bit modified version of 'Loki::AssocVector' associative vector from Loki library by Andrei Alexandrescu.

The number of "non-const" operations is reduced, e.g. all non-const iterators are not exported, therefore it is almost impossible e.g. externally re-sort the underlying sorted container.


The nominal CPU performance:

Container insertion: O(N) Container look-up: O(log(N)) (a'la std::map, but a bit faster)

It could be used as a "light" and good alternative for std::map associative container, in the case of relatively rare insertion and frequent look-up.

Due to helper base class Gaudi::Utils::MapBase, this class is "python-friendly", and one can perform all python manipulaitons in intuitive way:

>>> m = ... ## get the map
>>> print m ## print the map a'la python class dict
...
>>> for key in m : print key, m[key] ## iteration over the map
...
>>> for key,value in m.iteritems() : print key, value
...
>>> keys = m.keys() ## get the list of keys
>>> values = m.values () ## get the list of values
>> items = m.items () ## get the list of items
>>> if 'one' in m ## check the presence of the key in map
>>> v = m.get(key', None) ## return m[key] for existing key, else None
>>> del m[key] ## erase the key form the map
>>> value m[key] ## unchecked access through the key
...
>>> m.update( key, value ) ## update/insert key/value pair
void erase(iterator pos)
erase the element using the iterator
Definition VectorMap.h:197
bool update(const key_type &key, const mapped_type &mapped)
forced insertion of the key/mapped pair The method acts like "insert" but it DOES overwrite the exist...
Definition VectorMap.h:509
result_type insert(const key_type &key, const mapped_type &mapped)
insert the (key,value) pair into the container
Definition VectorMap.h:298
Attention
The syntax can be drastically simplified, if one redefines the setitem attribute:
>>> type(m).__setitem__ = Gaudi.Utils.MapBase.__setitem__
>>> m[key] = value ## much more intuitive semantics for key insertion
Helper base-class to allow the generic Python-decoration for all "map-like" classes in Gaudi.
Definition MapBase.h:45
This file provides a Grammar for the type Gaudi::Accumulators::Axis It allows to use that type from p...
Definition __init__.py:1

In a similar way getitem and delitem methods can be redefind

To avoid the unnesessary expansion of dictionaries it is highly recommended to exclude from dictionary the following methods:

  • lower_bound
  • upper_bound
  • equal_range
  • insert
See also
Gaudi::Utils::MapBase
Author
Vanya BELYAEV Ivan..nosp@m.Bely.nosp@m.aev@l.nosp@m.app..nosp@m.in2p3.nosp@m..fr
Date
2005-07-23

Definition at line 112 of file VectorMap.h.

Member Typedef Documentation

◆ _iterator

template<typename KEY, typename VALUE, typename KEYCOMPARE = std::less<>, typename ALLOCATOR = std::allocator<std::pair<KEY, VALUE>>>
using GaudiUtils::VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR >::_iterator = typename _vector::iterator
protected

the regular iterator (no export)

Definition at line 141 of file VectorMap.h.

◆ _vector

template<typename KEY, typename VALUE, typename KEYCOMPARE = std::less<>, typename ALLOCATOR = std::allocator<std::pair<KEY, VALUE>>>
typedef std::vector<value_type, allocator_type> GaudiUtils::VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR >::_vector

the actual storage container (no export)

Definition at line 137 of file VectorMap.h.

◆ allocator_type

template<typename KEY, typename VALUE, typename KEYCOMPARE = std::less<>, typename ALLOCATOR = std::allocator<std::pair<KEY, VALUE>>>
typedef ALLOCATOR GaudiUtils::VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR >::allocator_type

allocator (could be useful for optimizations)

Definition at line 125 of file VectorMap.h.

◆ compare_type

template<typename KEY, typename VALUE, typename KEYCOMPARE = std::less<>, typename ALLOCATOR = std::allocator<std::pair<KEY, VALUE>>>
typedef _compare_type GaudiUtils::VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR >::compare_type

the actual comparison criteria for valye_type objects

Definition at line 181 of file VectorMap.h.

◆ const_iterator

template<typename KEY, typename VALUE, typename KEYCOMPARE = std::less<>, typename ALLOCATOR = std::allocator<std::pair<KEY, VALUE>>>
using GaudiUtils::VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR >::const_iterator = typename _vector::const_iterator

visible const_iterator (exported)

Definition at line 147 of file VectorMap.h.

◆ const_reference

template<typename KEY, typename VALUE, typename KEYCOMPARE = std::less<>, typename ALLOCATOR = std::allocator<std::pair<KEY, VALUE>>>
using GaudiUtils::VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR >::const_reference = typename ALLOCATOR::value_type const&

the types to conform STL

Definition at line 129 of file VectorMap.h.

◆ const_reverse_iterator

template<typename KEY, typename VALUE, typename KEYCOMPARE = std::less<>, typename ALLOCATOR = std::allocator<std::pair<KEY, VALUE>>>
typedef std::reverse_iterator<const_iterator> GaudiUtils::VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR >::const_reverse_iterator

visible reverse const_iterator (exported)

Definition at line 151 of file VectorMap.h.

◆ difference_type

template<typename KEY, typename VALUE, typename KEYCOMPARE = std::less<>, typename ALLOCATOR = std::allocator<std::pair<KEY, VALUE>>>
using GaudiUtils::VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR >::difference_type = typename ALLOCATOR::difference_type

the types to conform STL

Definition at line 133 of file VectorMap.h.

◆ iterator

template<typename KEY, typename VALUE, typename KEYCOMPARE = std::less<>, typename ALLOCATOR = std::allocator<std::pair<KEY, VALUE>>>
using GaudiUtils::VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR >::iterator = typename _vector::const_iterator

visible const_iterator (exported)

Definition at line 145 of file VectorMap.h.

◆ iterators

template<typename KEY, typename VALUE, typename KEYCOMPARE = std::less<>, typename ALLOCATOR = std::allocator<std::pair<KEY, VALUE>>>
typedef std::pair<iterator, iterator> GaudiUtils::VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR >::iterators

visible iterator pait

Definition at line 153 of file VectorMap.h.

◆ key_compare

template<typename KEY, typename VALUE, typename KEYCOMPARE = std::less<>, typename ALLOCATOR = std::allocator<std::pair<KEY, VALUE>>>
typedef KEYCOMPARE GaudiUtils::VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR >::key_compare

comparison of keys

Definition at line 119 of file VectorMap.h.

◆ key_type

template<typename KEY, typename VALUE, typename KEYCOMPARE = std::less<>, typename ALLOCATOR = std::allocator<std::pair<KEY, VALUE>>>
typedef KEY GaudiUtils::VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR >::key_type

the actual type of key

Definition at line 115 of file VectorMap.h.

◆ mapped_type

template<typename KEY, typename VALUE, typename KEYCOMPARE = std::less<>, typename ALLOCATOR = std::allocator<std::pair<KEY, VALUE>>>
typedef VALUE GaudiUtils::VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR >::mapped_type

the actual type of value

Definition at line 117 of file VectorMap.h.

◆ reference

template<typename KEY, typename VALUE, typename KEYCOMPARE = std::less<>, typename ALLOCATOR = std::allocator<std::pair<KEY, VALUE>>>
using GaudiUtils::VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR >::reference = typename ALLOCATOR::value_type const&

the types to conform STL

Definition at line 127 of file VectorMap.h.

◆ result_type

template<typename KEY, typename VALUE, typename KEYCOMPARE = std::less<>, typename ALLOCATOR = std::allocator<std::pair<KEY, VALUE>>>
typedef std::pair<iterator, bool> GaudiUtils::VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR >::result_type

visible iterator pait

Definition at line 155 of file VectorMap.h.

◆ reverse_iterator

template<typename KEY, typename VALUE, typename KEYCOMPARE = std::less<>, typename ALLOCATOR = std::allocator<std::pair<KEY, VALUE>>>
typedef std::reverse_iterator<iterator> GaudiUtils::VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR >::reverse_iterator

visible reverse const_iterator (exported)

Definition at line 149 of file VectorMap.h.

◆ size_type

template<typename KEY, typename VALUE, typename KEYCOMPARE = std::less<>, typename ALLOCATOR = std::allocator<std::pair<KEY, VALUE>>>
using GaudiUtils::VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR >::size_type = typename ALLOCATOR::size_type

the types to conform STL

Definition at line 131 of file VectorMap.h.

◆ value_type

template<typename KEY, typename VALUE, typename KEYCOMPARE = std::less<>, typename ALLOCATOR = std::allocator<std::pair<KEY, VALUE>>>
typedef std::pair<key_type, mapped_type> GaudiUtils::VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR >::value_type

the actual storage item

Definition at line 121 of file VectorMap.h.

Constructor & Destructor Documentation

◆ VectorMap() [1/3]

template<typename KEY, typename VALUE, typename KEYCOMPARE = std::less<>, typename ALLOCATOR = std::allocator<std::pair<KEY, VALUE>>>
GaudiUtils::VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR >::VectorMap ( const allocator_type & alloc = allocator_type())
inline

default constructor from the the allocator

Parameters
cmpcomparison criteria for the key
allocallocator to be used

Definition at line 656 of file VectorMap.h.

656: m_vct( alloc ) {}
A bit modified version of 'Loki::AssocVector' associative vector from Loki library by Andrei Alexandr...
Definition VectorMap.h:112
_vector m_vct
the underlying sorted vector of (key,mapped) pairs
Definition VectorMap.h:758

◆ VectorMap() [2/3]

template<typename KEY, typename VALUE, typename KEYCOMPARE = std::less<>, typename ALLOCATOR = std::allocator<std::pair<KEY, VALUE>>>
template<class INPUT>
GaudiUtils::VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR >::VectorMap ( INPUT first,
INPUT last,
const allocator_type & alloc = allocator_type() )
inline

templated constructor from "convertible" sequence

Parameters
first'begin'-iterator for the convertible sequence
last'end'-iterator for the convertible sequence
cmpcomparison criteria for the key
allocallocator to be used

Definition at line 664 of file VectorMap.h.

664 : m_vct( first, last, alloc ) {
665 std::sort( m_vct.begin(), m_vct.end(), compare() );
666 }
const compare_type & compare() const
get the comparison criteria itself
Definition VectorMap.h:680

◆ VectorMap() [3/3]

template<typename KEY, typename VALUE, typename KEYCOMPARE = std::less<>, typename ALLOCATOR = std::allocator<std::pair<KEY, VALUE>>>
GaudiUtils::VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR >::VectorMap ( std::initializer_list< value_type > first,
const allocator_type & alloc = allocator_type() )
inline

tconstructor from initializer list

Parameters
list
cmpcomparison criteria for the key
allocallocator to be used

Definition at line 672 of file VectorMap.h.

673 : m_vct( first, alloc ) {
674 std::sort( m_vct.begin(), m_vct.end(), compare() );
675 }

Member Function Documentation

◆ at() [1/2]

template<typename KEY, typename VALUE, typename KEYCOMPARE = std::less<>, typename ALLOCATOR = std::allocator<std::pair<KEY, VALUE>>>
template<detail::key_comparable< key_type, key_compare > K>
const mapped_type & GaudiUtils::VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR >::at ( const K & key) const
inline

Definition at line 644 of file VectorMap.h.

644 {
645 iterator res = find( key );
646 if ( end() == res ) this->throw_out_of_range_exception();
647 return res->second; // cppcheck-suppress derefInvalidIteratorRedundantCheck; the above throws
648 }
void throw_out_of_range_exception() const
throw std::out_of_range exception
Definition MapBase.cpp:23
iterator end() const
"end" iterator for sequential access (const-only version!)
Definition VectorMap.h:188
iterator find(const key_type &key) const
find the element by key
Definition VectorMap.h:419
typename _vector::const_iterator iterator
visible const_iterator (exported)
Definition VectorMap.h:145

◆ at() [2/2]

template<typename KEY, typename VALUE, typename KEYCOMPARE = std::less<>, typename ALLOCATOR = std::allocator<std::pair<KEY, VALUE>>>
const mapped_type & GaudiUtils::VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR >::at ( const key_type & key) const
inline

checked access to elements by key throw std::out_of_range exception for non-existing keys

// OK:
K key = ... ;
std::cout << " Value: " << m.at(key) << std::end ; // it is OK!
Exceptions
std::out_of_rangefor non-existing keys
Parameters
keykey value
Returns
mapped value

Definition at line 642 of file VectorMap.h.

642{ return at<key_type>( key ); }
const mapped_type & at(const key_type &key) const
checked access to elements by key throw std::out_of_range exception for non-existing keys
Definition VectorMap.h:642

◆ begin()

template<typename KEY, typename VALUE, typename KEYCOMPARE = std::less<>, typename ALLOCATOR = std::allocator<std::pair<KEY, VALUE>>>
iterator GaudiUtils::VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR >::begin ( ) const
inline

"begin" iterator for sequential access (const-only version!)

Definition at line 186 of file VectorMap.h.

186{ return m_vct.begin(); }

◆ clear()

template<typename KEY, typename VALUE, typename KEYCOMPARE = std::less<>, typename ALLOCATOR = std::allocator<std::pair<KEY, VALUE>>>
void GaudiUtils::VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR >::clear ( )
inline

clear the container

Definition at line 470 of file VectorMap.h.

470{ m_vct.clear(); }

◆ compare() [1/2]

template<typename KEY, typename VALUE, typename KEYCOMPARE = std::less<>, typename ALLOCATOR = std::allocator<std::pair<KEY, VALUE>>>
const compare_type & GaudiUtils::VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR >::compare ( ) const
inline

get the comparison criteria itself

Definition at line 680 of file VectorMap.h.

680 {
681 static const compare_type s_cmp = compare_type();
682 return s_cmp;
683 }
_compare_type compare_type
the actual comparison criteria for valye_type objects
Definition VectorMap.h:181

◆ compare() [2/2]

template<typename KEY, typename VALUE, typename KEYCOMPARE = std::less<>, typename ALLOCATOR = std::allocator<std::pair<KEY, VALUE>>>
template<class TYPE1, class TYPE2>
bool GaudiUtils::VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR >::compare ( const TYPE1 & obj1,
const TYPE2 & obj2 ) const
inlineprotected

compare the objects using the comaprison criteria

Parameters
objthe first object
objthe second object
Returns
result of (obj1,obj2) comparison

Definition at line 734 of file VectorMap.h.

734 {
735 return compare()( obj1, obj2 );
736 }

◆ compare_key()

template<typename KEY, typename VALUE, typename KEYCOMPARE = std::less<>, typename ALLOCATOR = std::allocator<std::pair<KEY, VALUE>>>
const key_compare & GaudiUtils::VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR >::compare_key ( ) const
inline

get the comparison criteria for keys

Definition at line 685 of file VectorMap.h.

685{ return compare(); }

◆ count() [1/2]

template<typename KEY, typename VALUE, typename KEYCOMPARE = std::less<>, typename ALLOCATOR = std::allocator<std::pair<KEY, VALUE>>>
template<detail::key_comparable< key_type, key_compare > K>
size_type GaudiUtils::VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR >::count ( const K & key) const
inline

Definition at line 444 of file VectorMap.h.

444 {
445 return end() == find( key ) ? 0 : 1;
446 }

◆ count() [2/2]

template<typename KEY, typename VALUE, typename KEYCOMPARE = std::less<>, typename ALLOCATOR = std::allocator<std::pair<KEY, VALUE>>>
size_type GaudiUtils::VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR >::count ( const key_type & key) const
inline

count number of elements with the certain key

K key = ... ;
std::cout << " # of elements for the key: " << m.count(key) << std::end ;
Parameters
keykey to be searched
Returns
number of elements with the given key (0 or 1)

Definition at line 442 of file VectorMap.h.

442{ return count<key_type>( key ); }
size_type count(const key_type &key) const
count number of elements with the certain key
Definition VectorMap.h:442

◆ empty()

template<typename KEY, typename VALUE, typename KEYCOMPARE = std::less<>, typename ALLOCATOR = std::allocator<std::pair<KEY, VALUE>>>
bool GaudiUtils::VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR >::empty ( ) const
inline

empty container ?

Definition at line 464 of file VectorMap.h.

464{ return m_vct.empty(); }

◆ end()

template<typename KEY, typename VALUE, typename KEYCOMPARE = std::less<>, typename ALLOCATOR = std::allocator<std::pair<KEY, VALUE>>>
iterator GaudiUtils::VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR >::end ( ) const
inline

"end" iterator for sequential access (const-only version!)

Definition at line 188 of file VectorMap.h.

188{ return m_vct.end(); }

◆ equal_range() [1/2]

template<typename KEY, typename VALUE, typename KEYCOMPARE = std::less<>, typename ALLOCATOR = std::allocator<std::pair<KEY, VALUE>>>
template<detail::key_comparable< key_type, key_compare > K>
iterators GaudiUtils::VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR >::equal_range ( const K & key) const
inline

Definition at line 459 of file VectorMap.h.

459 {
460 return std::equal_range( begin(), end(), key, compare() );
461 }
iterator begin() const
"begin" iterator for sequential access (const-only version!)
Definition VectorMap.h:186

◆ equal_range() [2/2]

template<typename KEY, typename VALUE, typename KEYCOMPARE = std::less<>, typename ALLOCATOR = std::allocator<std::pair<KEY, VALUE>>>
iterators GaudiUtils::VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR >::equal_range ( const key_type & key) const
inline

Definition at line 457 of file VectorMap.h.

457{ return equal_range<key_type>( key ); }
iterators equal_range(const key_type &key) const
Definition VectorMap.h:457

◆ erase() [1/5]

template<typename KEY, typename VALUE, typename KEYCOMPARE = std::less<>, typename ALLOCATOR = std::allocator<std::pair<KEY, VALUE>>>
template<detail::key_comparable< key_type, key_compare > K>
size_type GaudiUtils::VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR >::erase ( const K & key)
inline

Definition at line 216 of file VectorMap.h.

216 {
217 iterator pos = find( key );
218 if ( end() == pos ) { return 0; }
219 erase( pos );
220 return 1;
221 }

◆ erase() [2/5]

template<typename KEY, typename VALUE, typename KEYCOMPARE = std::less<>, typename ALLOCATOR = std::allocator<std::pair<KEY, VALUE>>>
size_type GaudiUtils::VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR >::erase ( const key_type & key)
inline

erase the element using the key

...
K key = ... ;
std::cout << " # of erased elements "
<< m.erase ( key ) << std::endl ;
Parameters
keykey for the element to be erased
Returns
number of erased elements (0 or 1)

Definition at line 214 of file VectorMap.h.

214{ return erase<key_type>( key ); }

◆ erase() [3/5]

template<typename KEY, typename VALUE, typename KEYCOMPARE = std::less<>, typename ALLOCATOR = std::allocator<std::pair<KEY, VALUE>>>
size_type GaudiUtils::VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR >::erase ( iterator first,
iterator last )
inline

erase the sequence of elements using the iterators

Parameters
firstbegin iterator of sub-sequence to be erased
endend iterator of the sub_sequence to be erased
Returns
number of erased elements

Definition at line 227 of file VectorMap.h.

227 {
228 m_vct.erase( iter( first ), iter( last ) );
229 return last - first;
230 }
_iterator iter(iterator p)
the conversion from 'const' to 'non-const' iterator
Definition VectorMap.h:744

◆ erase() [4/5]

template<typename KEY, typename VALUE, typename KEYCOMPARE = std::less<>, typename ALLOCATOR = std::allocator<std::pair<KEY, VALUE>>>
void GaudiUtils::VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR >::erase ( iterator pos)
inline

erase the element using the iterator

Parameters
posposition of the element to be erased

Definition at line 197 of file VectorMap.h.

197{ m_vct.erase( iter( pos ) ); }

◆ erase() [5/5]

template<typename KEY, typename VALUE, typename KEYCOMPARE = std::less<>, typename ALLOCATOR = std::allocator<std::pair<KEY, VALUE>>>
template<class TYPE>
size_type GaudiUtils::VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR >::erase ( TYPE first,
TYPE last )
inline

erase the sequence of elements using the sequence of keys

// some sequence of keys, to be removed
KEYS keys = ... ;
std::cout
<< " # keys to be removed: " << keys.size()
<< " # keys removed: " << m.erase( keys.begin() , keys.end() )
<< std::endl ;
Parameters
firstbegin-iterator for the sequence of keys
lastend-iterator for the sequence of keys
Returns
number of erased elements

Definition at line 252 of file VectorMap.h.

252 {
253 size_type res = 0;
254 for ( ; first != last; ++first ) { res += erase( *first ); }
255 return res;
256 }
typename ALLOCATOR::size_type size_type
the types to conform STL
Definition VectorMap.h:131

◆ find() [1/2]

template<typename KEY, typename VALUE, typename KEYCOMPARE = std::less<>, typename ALLOCATOR = std::allocator<std::pair<KEY, VALUE>>>
template<detail::key_comparable< key_type, key_compare > K>
iterator GaudiUtils::VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR >::find ( const K & key) const
inline

Definition at line 421 of file VectorMap.h.

421 {
423 if ( end() != res && compare( key, res->first ) ) { res = end(); }
424 return res;
425 }
iterator lower_bound(const key_type &key) const
Definition VectorMap.h:447

◆ find() [2/2]

template<typename KEY, typename VALUE, typename KEYCOMPARE = std::less<>, typename ALLOCATOR = std::allocator<std::pair<KEY, VALUE>>>
iterator GaudiUtils::VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR >::find ( const key_type & key) const
inline

find the element by key

Map m = ... ;
K key = ...;
// Is key in the container?
Map::iterator ifound = m.find( key ) ;
if ( m.end() != ifound )
{
std::cout << "The value is : " << ifound->second << std::endl ;
}
Extension of the STL map.
Definition Map.h:83
typename map_type::iterator iterator
Definition Map.h:98
Parameters
keykey to be searched
Returns
iterator to the element position in the container

Definition at line 419 of file VectorMap.h.

419{ return find<key_type>( key ); }

◆ insert() [1/6]

template<typename KEY, typename VALUE, typename KEYCOMPARE = std::less<>, typename ALLOCATOR = std::allocator<std::pair<KEY, VALUE>>>
result_type GaudiUtils::VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR >::insert ( const key_type & key,
const mapped_type & mapped )
inline

insert the (key,value) pair into the container

Attention
there is no replacement for the existing key!

It is STL-compliant behavior for associative containers.

K key = ... ;
V val1 = ... ;
V val2 = ... ;
std::cout
<< " Before insert: " << m[key] // should be: V()
<< std::end ;
// insert the value into the map:
const bool inserted1 = m.insert( key , val1 ).second ;
std::cout
<< " 1st insert: "
<< Gaudi::Utils::toString( inserted1 ) // should be: "True"
<< " value: " << m[key] // should be: val1
<< std::endl ;
// try to re-insert another value with the same key:
const bool inserted2 = m.insert( key , val2 ).second ;
std::cout
<< " 2nd insert: "
<< Gaudi::Utils::toString( inserted2 ) // should be: "False"
<< " value: " << m[key] // should be: val1
<< std::endl ;
std::string toString(const TYPE &obj)
the generic implementation of the type conversion to the string
Definition ToStream.h:329
Parameters
keykey value to be inserted
mappedvalue to be associated with the key
Returns
position of the inserted elements with the flag which allows to distinguish the actual insertion

Definition at line 298 of file VectorMap.h.

298{ return insert( value_type( key, mapped ) ); }
std::pair< key_type, mapped_type > value_type
the actual storage item
Definition VectorMap.h:121

◆ insert() [2/6]

template<typename KEY, typename VALUE, typename KEYCOMPARE = std::less<>, typename ALLOCATOR = std::allocator<std::pair<KEY, VALUE>>>
result_type GaudiUtils::VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR >::insert ( const value_type & value)
inline

insert the (key,value) pair into the container

Attention
there is no replacement for the existing element!

It is STL-compliant behavior for associative containers.

K key = ... ;
V val1 = ... ;
V val2 = ... ;
std::cout
<< " Before insert: " << m[key] // should be: V()
<< std::end ;
// insert the value into the map:
const bool inserted1 = m.insert ( std::make_pair( key , val1 ) ).second ;
std::cout
<< " 1st insert: "
<< Gaudi::Utils::toString( inserted1 ) // should be: "True"
<< " value: " << m[key] // should be: val1
<< std::endl ;
// try to re-insert another value with the same key:
const bool inserted2 = m.insert ( std::make_pair( key , val2 ) ).second ;
std::cout
<< " 2nd insert: "
<< Gaudi::Utils::toString( inserted2 ) // should be: "False"
<< " value: " << m[key] // should be: val1
<< std::endl ;
Parameters
valuevalue to be inserted
Returns
position of the inserted elements with the flag which allows to distinguish the actual insertion

Definition at line 339 of file VectorMap.h.

339 {
340 bool found = true;
342 if ( end() == result || compare( value.first, result->first ) ) {
343 result = m_vct.insert( result, value );
344 found = false;
345 }
346 return result_type( iter( result ), !found );
347 }
std::pair< iterator, bool > result_type
visible iterator pait
Definition VectorMap.h:155
typename _vector::iterator _iterator
the regular iterator (no export)
Definition VectorMap.h:141

◆ insert() [3/6]

template<typename KEY, typename VALUE, typename KEYCOMPARE = std::less<>, typename ALLOCATOR = std::allocator<std::pair<KEY, VALUE>>>
result_type GaudiUtils::VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR >::insert ( iterator pos,
const value_type & value )
inline

insert the element with some guess about its new position With the right guess the method could be more efficient

Attention
there is no replacement for the existing element!
Parameters
posthe guess about position where to insert the element
valuevalue to be inserted
Returns
position of the inserted elements with the flag which indicated the actual insertion

Definition at line 356 of file VectorMap.h.

356 {
357 if ( pos != end() && compare( *pos, value ) &&
358 ( pos == end() - 1 || ( !compare( value, *( pos + 1 ) ) && compare( *( pos + 1 ), value ) ) ) ) {
359 return result_type( m_vct.insert( iter( pos ), value ), true );
360 }
361 return insert( value );
362 }

◆ insert() [4/6]

template<typename KEY, typename VALUE, typename KEYCOMPARE = std::less<>, typename ALLOCATOR = std::allocator<std::pair<KEY, VALUE>>>
result_type GaudiUtils::VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR >::insert ( iterator pos,
key_type key,
mapped_type mapped )
inline

insert the (key,value) pair into the container With the right guess the method could be more efficient

Attention
there is no replacement for the existing element!
Parameters
posthe guess about position where to insert the element
keykey value to be inserted
mappedvalue to be associated with the key
Returns
position of the inserted elements with the flag which indicated the actual insertion

Definition at line 372 of file VectorMap.h.

372 {
373 return insert( pos, value_type( std::move( key ), std::move( mapped ) ) );
374 }

◆ insert() [5/6]

template<typename KEY, typename VALUE, typename KEYCOMPARE = std::less<>, typename ALLOCATOR = std::allocator<std::pair<KEY, VALUE>>>
template<class KEYS, class VALUES>
void GaudiUtils::VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR >::insert ( KEYS kf,
KEYS kl,
VALUES vf )
inline

insert into the container the elements from 2 "parallel" sequences

Attention
there is no replacement for the existing element!
Parameters
kfthe begin iterator of the sequence of keys
klthe end iterator of the sequence of keys
vfthe begin iterator of the sequence of values

Definition at line 392 of file VectorMap.h.

392 {
393 for ( ; kf != kl; ++kf, ++vf ) { insert( *kf, *vf ); }
394 }

◆ insert() [6/6]

template<typename KEY, typename VALUE, typename KEYCOMPARE = std::less<>, typename ALLOCATOR = std::allocator<std::pair<KEY, VALUE>>>
template<class PAIRS>
void GaudiUtils::VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR >::insert ( PAIRS first,
PAIRS last )
inline

insert the sequence of elements into the container

Attention
there is no replacement for the existing element!
Parameters
firstthe begin iterator of the sequence
lastthe end iterator of the sequence

Definition at line 381 of file VectorMap.h.

381 {
382 for ( ; first != last; ++first ) { insert( *first ); }
383 }

◆ iter() [1/2]

template<typename KEY, typename VALUE, typename KEYCOMPARE = std::less<>, typename ALLOCATOR = std::allocator<std::pair<KEY, VALUE>>>
iterator GaudiUtils::VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR >::iter ( _iterator p)
inlineprotected

the conversion from 'non-const' to 'const' iterator

Definition at line 750 of file VectorMap.h.

750 {
751 auto result = begin();
752 std::advance( result, std::distance( m_vct.begin(), p ) );
753 return result;
754 }

◆ iter() [2/2]

template<typename KEY, typename VALUE, typename KEYCOMPARE = std::less<>, typename ALLOCATOR = std::allocator<std::pair<KEY, VALUE>>>
_iterator GaudiUtils::VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR >::iter ( iterator p)
inlineprotected

the conversion from 'const' to 'non-const' iterator

Definition at line 744 of file VectorMap.h.

744 {
745 auto result = m_vct.begin();
747 return result;
748 }

◆ key_at()

template<typename KEY, typename VALUE, typename KEYCOMPARE = std::less<>, typename ALLOCATOR = std::allocator<std::pair<KEY, VALUE>>>
const key_type & GaudiUtils::VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR >::key_at ( const size_t index) const
inline

useful method for python decoration:

Parameters
index(INPUT) the index
Returns
the key at given index
Exceptions
std::out_of_rangefor invalid index

Definition at line 708 of file VectorMap.h.

708 {
709 if ( index >= size() ) { this->throw_out_of_range_exception(); }
710 auto it = this->begin();
712 return it->first;
713 }
size_type size() const
number of elements
Definition VectorMap.h:466

◆ lower_bound() [1/4]

template<typename KEY, typename VALUE, typename KEYCOMPARE = std::less<>, typename ALLOCATOR = std::allocator<std::pair<KEY, VALUE>>>
template<detail::key_comparable< key_type, key_compare > K>
_iterator GaudiUtils::VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR >::lower_bound ( const K & key)
inlineprotected

Definition at line 740 of file VectorMap.h.

740 {
741 return std::lower_bound( m_vct.begin(), m_vct.end(), key, compare() );
742 }

◆ lower_bound() [2/4]

template<typename KEY, typename VALUE, typename KEYCOMPARE = std::less<>, typename ALLOCATOR = std::allocator<std::pair<KEY, VALUE>>>
template<detail::key_comparable< key_type, key_compare > K>
iterator GaudiUtils::VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR >::lower_bound ( const K & key) const
inline

Definition at line 449 of file VectorMap.h.

449 {
450 return std::lower_bound( begin(), end(), key, compare() );
451 }

◆ lower_bound() [3/4]

template<typename KEY, typename VALUE, typename KEYCOMPARE = std::less<>, typename ALLOCATOR = std::allocator<std::pair<KEY, VALUE>>>
_iterator GaudiUtils::VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR >::lower_bound ( const key_type & key)
inlineprotected

'lower-bound' - non-const version

Definition at line 738 of file VectorMap.h.

738{ return lower_bound<key_type>( key ); }

◆ lower_bound() [4/4]

template<typename KEY, typename VALUE, typename KEYCOMPARE = std::less<>, typename ALLOCATOR = std::allocator<std::pair<KEY, VALUE>>>
iterator GaudiUtils::VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR >::lower_bound ( const key_type & key) const
inline

Definition at line 447 of file VectorMap.h.

447{ return lower_bound<key_type>( key ); }

◆ max_size()

template<typename KEY, typename VALUE, typename KEYCOMPARE = std::less<>, typename ALLOCATOR = std::allocator<std::pair<KEY, VALUE>>>
size_type GaudiUtils::VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR >::max_size ( ) const
inline

maximal allowed size

Definition at line 468 of file VectorMap.h.

468{ return m_vct.max_size(); }

◆ merge() [1/2]

template<typename KEY, typename VALUE, typename KEYCOMPARE = std::less<>, typename ALLOCATOR = std::allocator<std::pair<KEY, VALUE>>>
VectorMap & GaudiUtils::VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR >::merge ( const VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR > & right)
inline

merge two maps

Definition at line 691 of file VectorMap.h.

691 {
692 for ( const auto& i : right ) { update( i.first, i.second ); }
693 return *this;
694 }

◆ merge() [2/2]

template<typename KEY, typename VALUE, typename KEYCOMPARE = std::less<>, typename ALLOCATOR = std::allocator<std::pair<KEY, VALUE>>>
template<class K1, class K2, class K3, class K4>
VectorMap & GaudiUtils::VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR >::merge ( const VectorMap< K1, K2, K3, K4 > & right)
inline

merge two maps

Definition at line 697 of file VectorMap.h.

697 {
698 for ( const auto& i : right ) { update( i.first, i.second ); }
699 return *this;
700 }

◆ operator()() [1/2]

template<typename KEY, typename VALUE, typename KEYCOMPARE = std::less<>, typename ALLOCATOR = std::allocator<std::pair<KEY, VALUE>>>
template<detail::key_comparable< key_type, key_compare > K>
const mapped_type & GaudiUtils::VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR >::operator() ( const K & key) const
inline

Definition at line 584 of file VectorMap.h.

584 {
585 static const mapped_type s_default = mapped_type();
586 iterator res = find( key );
587 if ( end() == res ) { return s_default; }
588 return res->second;
589 }
VALUE mapped_type
the actual type of value
Definition VectorMap.h:117

◆ operator()() [2/2]

template<typename KEY, typename VALUE, typename KEYCOMPARE = std::less<>, typename ALLOCATOR = std::allocator<std::pair<KEY, VALUE>>>
const mapped_type & GaudiUtils::VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR >::operator() ( const key_type & key) const
inline

access to element by key (const version) there is no container increment for missing keys

Attention
The behavior different from std::map, it is similar to GaudiUtils::Map

The method is added on request from ATLAS (see Savannah report #21395 and #21394) For typical usage of this class in LHCb context as "ExtraInfo" field I would like to recommend to AVOID this method

// OK:
K key = ... ;
std::cout << " Value: " << m(key) << std::end ; // it is OK!
// ERROR:
V value = ... ;
m(key) = value ; // ERROR!
See also
GaudiUtils::Map
Parameters
keykey value
Returns
mapped value for existing key and the default value for non-existing key

Definition at line 582 of file VectorMap.h.

582{ return this->template operator()<key_type>( key ); }
KEY key_type
the actual type of key
Definition VectorMap.h:115

◆ operator<=>()

template<typename KEY, typename VALUE, typename KEYCOMPARE = std::less<>, typename ALLOCATOR = std::allocator<std::pair<KEY, VALUE>>>
auto GaudiUtils::VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR >::operator<=> ( const VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR > & other) const
inline

comparison criteria for containers

Definition at line 479 of file VectorMap.h.

479=>( const VectorMap& other ) const { return m_vct <=> other.m_vct; }
VectorMap(const allocator_type &alloc=allocator_type())
default constructor from the the allocator
Definition VectorMap.h:656

◆ operator==()

template<typename KEY, typename VALUE, typename KEYCOMPARE = std::less<>, typename ALLOCATOR = std::allocator<std::pair<KEY, VALUE>>>
bool GaudiUtils::VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR >::operator== ( const VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR > & other) const
inline

comparison criteria for containers

Definition at line 477 of file VectorMap.h.

477{ return m_vct == other.m_vct; }

◆ operator[]() [1/2]

template<typename KEY, typename VALUE, typename KEYCOMPARE = std::less<>, typename ALLOCATOR = std::allocator<std::pair<KEY, VALUE>>>
template<detail::key_comparable< key_type, key_compare > K>
const mapped_type & GaudiUtils::VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR >::operator[] ( const K & key) const
inline

Definition at line 622 of file VectorMap.h.

622 {
623 return ( *this )( key );
624 }

◆ operator[]() [2/2]

template<typename KEY, typename VALUE, typename KEYCOMPARE = std::less<>, typename ALLOCATOR = std::allocator<std::pair<KEY, VALUE>>>
const mapped_type & GaudiUtils::VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR >::operator[] ( const key_type & key) const
inline

access to element by key (const version) there is no container increment for missing keys

Attention
The behavior different from std::map, it is similar to GaudiUtils::Map

The method is added on request from ATLAS (see Savannah report #21395 and #21394) For typical usage of this class in LHCb context as "ExtraInfo" field I would like to recommend to AVOID this method

// OK:
K key = ... ;
std::cout << " Value: " << m[key] << std::end ; // it is OK!
// ERROR:
V value = ... ;
m[key] = value ; // ERROR!
See also
GaudiUtils::Map
Parameters
keykey value
Returns
mapped value

Definition at line 620 of file VectorMap.h.

620{ return ( *this )( key ); }

◆ rbegin()

template<typename KEY, typename VALUE, typename KEYCOMPARE = std::less<>, typename ALLOCATOR = std::allocator<std::pair<KEY, VALUE>>>
reverse_iterator GaudiUtils::VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR >::rbegin ( ) const
inline

"rbegin" iterator for sequential access (const-only version!)

Definition at line 190 of file VectorMap.h.

190{ return m_vct.rbegin(); }

◆ rend()

template<typename KEY, typename VALUE, typename KEYCOMPARE = std::less<>, typename ALLOCATOR = std::allocator<std::pair<KEY, VALUE>>>
reverse_iterator GaudiUtils::VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR >::rend ( ) const
inline

"rend" iterator for sequential access (const-only version!)

Definition at line 192 of file VectorMap.h.

192{ return m_vct.rend(); }

◆ reserve()

template<typename KEY, typename VALUE, typename KEYCOMPARE = std::less<>, typename ALLOCATOR = std::allocator<std::pair<KEY, VALUE>>>
void GaudiUtils::VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR >::reserve ( size_type num)
inline

reserve the space in the container for at least 'num' elements

Definition at line 472 of file VectorMap.h.

472{ m_vct.reserve( num ); }

◆ size()

template<typename KEY, typename VALUE, typename KEYCOMPARE = std::less<>, typename ALLOCATOR = std::allocator<std::pair<KEY, VALUE>>>
size_type GaudiUtils::VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR >::size ( ) const
inline

number of elements

Definition at line 466 of file VectorMap.h.

466{ return m_vct.size(); }

◆ swap()

template<typename KEY, typename VALUE, typename KEYCOMPARE = std::less<>, typename ALLOCATOR = std::allocator<std::pair<KEY, VALUE>>>
void GaudiUtils::VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR >::swap ( VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR > & other)
inline

swap function, which 'swaps' the content of two containers

Definition at line 474 of file VectorMap.h.

474{ std::swap( m_vct, other.m_vct ); }
void swap(GaudiUtils::VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR > &left, GaudiUtils::VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR > &right)
the definition of specialized algorithm for swapping
Definition VectorMap.h:767

◆ update() [1/3]

template<typename KEY, typename VALUE, typename KEYCOMPARE = std::less<>, typename ALLOCATOR = std::allocator<std::pair<KEY, VALUE>>>
template<detail::key_comparable< key_type, key_compare > K>
bool GaudiUtils::VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR >::update ( const K & key,
const mapped_type & mapped )
inline

Definition at line 511 of file VectorMap.h.

511 {
513 if ( end() == result || compare( key, result->first ) ) {
514 result = m_vct.insert( result, value_type( key, mapped ) );
515 return false;
516 } else {
517 result->second = mapped;
518 }
519 //
520 return true;
521 }

◆ update() [2/3]

template<typename KEY, typename VALUE, typename KEYCOMPARE = std::less<>, typename ALLOCATOR = std::allocator<std::pair<KEY, VALUE>>>
bool GaudiUtils::VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR >::update ( const key_type & key,
const mapped_type & mapped )
inline

forced insertion of the key/mapped pair The method acts like "insert" but it DOES overwrite the existing mapped value.

Attention
There is no STL analogue

The method is added on request from ATLAS (see Savannah report #21395 and #21394)

K key = ... ;
V val1 = ... ;
V val2 = ... ;
std::cout << "Value " << m[key] << std::endl ; // should be: V()
m.update ( key , val1 ) ;
std::cout << "Value " << m[key] << std::endl ; // should be: val1
m.update ( key , val2 ) ;
std::cout << "Value " << m[key] << std::endl ; // should be: val2
Parameters
keykey value
mappedmapped value
Returns
true if the existing value has been replaced

Definition at line 509 of file VectorMap.h.

509{ return update<key_type>( key, mapped ); }

◆ update() [3/3]

template<typename KEY, typename VALUE, typename KEYCOMPARE = std::less<>, typename ALLOCATOR = std::allocator<std::pair<KEY, VALUE>>>
bool GaudiUtils::VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR >::update ( const value_type & val)
inline

forced insertion of the key/mapped pair The method acts like "insert" but it DOES overwrite the mapped value.

Attention
There is no STL analogue

The method is added on request from ATLAS (see Savannah report #21395 and #21394)

K key = ... ;
V val1 = ... ;
V val2 = ... ;
std::cout << "Value " << m[key] << std::endl ; // should be: V()
m.update ( std::make_pair ( key , val1 ) ) ;
std::cout << "Value " << m[key] << std::endl ; // should be: val1
m.update ( std::make_pair ( key , val2 ) ) ;
std::cout << "Value " << m[key] << std::endl ; // should be: val2
Parameters
vala pair of (key,value)
Returns
true if the existing value has been replaced

Definition at line 550 of file VectorMap.h.

550{ return update( val.first, val.second ); }

◆ upper_bound() [1/2]

template<typename KEY, typename VALUE, typename KEYCOMPARE = std::less<>, typename ALLOCATOR = std::allocator<std::pair<KEY, VALUE>>>
template<detail::key_comparable< key_type, key_compare > K>
iterator GaudiUtils::VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR >::upper_bound ( const K & key) const
inline

Definition at line 454 of file VectorMap.h.

454 {
455 return std::upper_bound( begin(), end(), key, compare() );
456 }

◆ upper_bound() [2/2]

template<typename KEY, typename VALUE, typename KEYCOMPARE = std::less<>, typename ALLOCATOR = std::allocator<std::pair<KEY, VALUE>>>
iterator GaudiUtils::VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR >::upper_bound ( const key_type & key) const
inline

Definition at line 452 of file VectorMap.h.

452{ return upper_bound<key_type>( key ); }
iterator upper_bound(const key_type &key) const
Definition VectorMap.h:452

◆ value_at()

template<typename KEY, typename VALUE, typename KEYCOMPARE = std::less<>, typename ALLOCATOR = std::allocator<std::pair<KEY, VALUE>>>
const mapped_type & GaudiUtils::VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR >::value_at ( const size_t index) const
inline

useful method for python decoration:

Parameters
index(INPUT) the index
Returns
the value at given index
Exceptions
std::out_of_rangefor invalid index

Definition at line 719 of file VectorMap.h.

719 {
720 if ( index >= size() ) { this->throw_out_of_range_exception(); }
721 auto it = this->begin();
723 return it->second;
724 }

◆ operator<<

template<typename KEY, typename VALUE, typename KEYCOMPARE = std::less<>, typename ALLOCATOR = std::allocator<std::pair<KEY, VALUE>>>
std::ostream & operator<< ( std::ostream & str,
const VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR > &  )
friend

printout to ostream - not implemented

Definition at line 687 of file VectorMap.h.

687{ return str; }

Member Data Documentation

◆ m_vct

template<typename KEY, typename VALUE, typename KEYCOMPARE = std::less<>, typename ALLOCATOR = std::allocator<std::pair<KEY, VALUE>>>
_vector GaudiUtils::VectorMap< KEY, VALUE, KEYCOMPARE, ALLOCATOR >::m_vct
private

the underlying sorted vector of (key,mapped) pairs

Definition at line 758 of file VectorMap.h.


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