MRPT
2.0.1
|
A STL-like container which looks and behaves (almost exactly) like a std::map<> but is implemented as a linear std::vector<> indexed by KEY.
Note that KEY must be integer types only (size_t, uint32_t, etc.) This implementation is much more efficient than std::map<> when the most common operation is accesing elements by KEY with find() or [], and the range of KEY values starts at 0 (or a reasonable low number).
This container is internally implemented as a linear array (std::vector) of the same fundamental type than the equivalent std::map<K,V>, that is, elements are std::pair<K,V>
(note that K is NOT const as in std::map). I know, I know... this implementation wastes a lot of useless key elements in the pair.first when indices are already implicit in the std::vector<> order... but I promise I'll pay a beer to whoever show me an efficient alternative. If failed, update this comment: COUNTER OF WASTED HOURS WITH THIS: 3h
Note that there is one fundamental difference wrt std::map<>: if you start with an empty map_as_vector<> and insert one element at the i'th position (with either [] or insert), the elements [0,i-1] will also exist then, but both their first & second entries (for the corresponding std::pair) will be undefined. This was intentional in order to gain efficiency (in particular, each std::pair<> doesn't have a constructor when resizing the underlying std::vector).
The default underlying non-associative container is a "memory-aligned std::vector<>", but it can be changed to a standard vector<> or to a deque<> (to avoid memory reallocations) by changing the template parameter VECTOR_T.
Definition at line 55 of file map_as_vector.h.
#include <mrpt/containers/map_as_vector.h>
Public Member Functions | |
Constructors, read/write access and other operations | |
map_as_vector ()=default | |
< Default constructor - does nothing */ More... | |
map_as_vector (const map_as_vector< KEY, VALUE > &o) | |
Copy constructor. More... | |
size_t | size () const |
bool | empty () const |
size_type | count (const key_type i) const |
Count how many entries have a given key value - unlike std::map<K,V>, recall that this class will say an element i<N-1 exists just due to an insertion of element at N. More... | |
size_type | max_size () const |
Maximum size due to system limits. More... | |
const vec_t & | getVector () const |
Return a read-only reference to the internal vector. More... | |
void | clear () |
Clear the contents of this container. More... | |
void | swap (map_as_vector< KEY, VALUE > &o) |
Efficient swap with another object. More... | |
VALUE & | operator[] (const size_t i) |
Write/read via [i] operator, that creates all elements up to (and including) the i'th if they didn't exist already. More... | |
void | insert (const iterator &guess_point, const value_type &keyvalpair) |
Insert pair<key,val>, as in std::map (guess_point is actually ignored in this class) More... | |
void | insert (const value_type &keyvalpair) |
Insert pair<key,val>, as in std::map. More... | |
iterator | find (const size_t i) |
Constant-time find, returning an iterator to the <key,val> pair or to end() if not found (that is, if it's above the maximum index in the vector) More... | |
const_iterator | find (const size_t i) const |
Constant-time find, returning an iterator to the <key,val> pair or to end() if not found (that is, if it's above the maximum index in the vector) More... | |
Private Attributes | |
vec_t | m_vec |
The actual container. More... | |
Iterators stuff and other types | |
using | key_type = KEY |
using | value_type = std::pair< KEY, VALUE > |
using | vec_t = VECTOR_T |
using | size_type = typename vec_t::size_type |
using | iterator = typename vec_t::iterator |
using | const_iterator = typename vec_t::const_iterator |
using | reverse_iterator = std::reverse_iterator< iterator > |
using | const_reverse_iterator = std::reverse_iterator< const_iterator > |
iterator | begin () |
iterator | end () |
const_iterator | begin () const |
const_iterator | end () const |
reverse_iterator | rbegin () |
const_reverse_iterator | rbegin () const |
reverse_iterator | rend () |
const_reverse_iterator | rend () const |
using mrpt::containers::map_as_vector< KEY, VALUE, VECTOR_T >::const_iterator = typename vec_t::const_iterator |
Definition at line 65 of file map_as_vector.h.
using mrpt::containers::map_as_vector< KEY, VALUE, VECTOR_T >::const_reverse_iterator = std::reverse_iterator<const_iterator> |
Definition at line 67 of file map_as_vector.h.
using mrpt::containers::map_as_vector< KEY, VALUE, VECTOR_T >::iterator = typename vec_t::iterator |
Definition at line 64 of file map_as_vector.h.
using mrpt::containers::map_as_vector< KEY, VALUE, VECTOR_T >::key_type = KEY |
Definition at line 60 of file map_as_vector.h.
using mrpt::containers::map_as_vector< KEY, VALUE, VECTOR_T >::reverse_iterator = std::reverse_iterator<iterator> |
Definition at line 66 of file map_as_vector.h.
using mrpt::containers::map_as_vector< KEY, VALUE, VECTOR_T >::size_type = typename vec_t::size_type |
Definition at line 63 of file map_as_vector.h.
using mrpt::containers::map_as_vector< KEY, VALUE, VECTOR_T >::value_type = std::pair<KEY, VALUE> |
Definition at line 61 of file map_as_vector.h.
using mrpt::containers::map_as_vector< KEY, VALUE, VECTOR_T >::vec_t = VECTOR_T |
Definition at line 62 of file map_as_vector.h.
|
inlinedefault |
< Default constructor - does nothing */
|
inline |
Copy constructor.
Definition at line 94 of file map_as_vector.h.
|
inline |
Definition at line 69 of file map_as_vector.h.
Referenced by mrpt::containers::map_as_vector< size_t, size_t >::rend().
|
inline |
Definition at line 71 of file map_as_vector.h.
|
inline |
Clear the contents of this container.
Definition at line 110 of file map_as_vector.h.
Referenced by mrpt::math::MatrixBlockSparseCols< Scalar, NROWS, NCOLS, INFO, HAS_REMAP, INDEX_REMAP_MAP_IMPL >::clearAll().
|
inline |
Count how many entries have a given key value - unlike std::map<K,V>, recall that this class will say an element i<N-1 exists just due to an insertion of element at N.
Definition at line 100 of file map_as_vector.h.
|
inline |
Definition at line 96 of file map_as_vector.h.
|
inline |
Definition at line 70 of file map_as_vector.h.
Referenced by mrpt::containers::map_as_vector< size_t, size_t >::rbegin().
|
inline |
Definition at line 72 of file map_as_vector.h.
|
inline |
Constant-time find, returning an iterator to the <key,val> pair or to end() if not found (that is, if it's above the maximum index in the vector)
Definition at line 138 of file map_as_vector.h.
|
inline |
Constant-time find, returning an iterator to the <key,val> pair or to end() if not found (that is, if it's above the maximum index in the vector)
Definition at line 148 of file map_as_vector.h.
|
inline |
Return a read-only reference to the internal vector.
Definition at line 108 of file map_as_vector.h.
|
inline |
Insert pair<key,val>, as in std::map (guess_point is actually ignored in this class)
Definition at line 124 of file map_as_vector.h.
|
inline |
Insert pair<key,val>, as in std::map.
Definition at line 130 of file map_as_vector.h.
|
inline |
Maximum size due to system limits.
Definition at line 106 of file map_as_vector.h.
|
inline |
Write/read via [i] operator, that creates all elements up to (and including) the i'th if they didn't exist already.
Definition at line 115 of file map_as_vector.h.
Referenced by mrpt::containers::map_as_vector< size_t, size_t >::insert().
|
inline |
Definition at line 73 of file map_as_vector.h.
|
inline |
Definition at line 74 of file map_as_vector.h.
|
inline |
Definition at line 78 of file map_as_vector.h.
|
inline |
Definition at line 79 of file map_as_vector.h.
|
inline |
Definition at line 95 of file map_as_vector.h.
|
inline |
Efficient swap with another object.
Definition at line 112 of file map_as_vector.h.
|
private |
The actual container.
Definition at line 86 of file map_as_vector.h.
Referenced by mrpt::containers::map_as_vector< size_t, size_t >::begin(), mrpt::containers::map_as_vector< size_t, size_t >::clear(), mrpt::containers::map_as_vector< size_t, size_t >::count(), mrpt::containers::map_as_vector< size_t, size_t >::empty(), mrpt::containers::map_as_vector< size_t, size_t >::end(), mrpt::containers::map_as_vector< size_t, size_t >::find(), mrpt::containers::map_as_vector< size_t, size_t >::getVector(), mrpt::containers::map_as_vector< size_t, size_t >::max_size(), mrpt::containers::map_as_vector< size_t, size_t >::operator[](), mrpt::containers::map_as_vector< size_t, size_t >::size(), and mrpt::containers::map_as_vector< size_t, size_t >::swap().
Page generated by Doxygen 1.8.14 for MRPT 2.0.1 Git: 0fef1a6d7 Fri Apr 3 23:00:21 2020 +0200 at vie abr 3 23:20:28 CEST 2020 |