template class mrpt::containers::bimap

A bidirectional version of std::map, declared as bimap<KEY,VALUE> and which actually contains two std::map’s, one for keys and another for values.

To use this class, insert new pairs KEY<->VALUE with bimap::insert. Then, you can access the KEY->VALUE map with bimap::direct(), and the VALUE->KEY map with bimap::inverse(). The consistency of the two internal maps is assured at any time.

This class can be accessed through iterators to the map KEY->VALUE only.

Both typenames KEY and VALUE must be suitable for being employed as keys in a std::map, i.e. they must be comparable through a “< operator”.

Defined in #include <mrpt/containers/bimap.h>

#include <mrpt/containers/bimap.h>

template <typename KEY, typename VALUE>
class bimap
{
public:
    // typedefs

    typedef typename std::map<KEY, VALUE>::const_iterator const_iterator;
    typedef typename std::map<KEY, VALUE>::iterator iterator;
    typedef typename std::map<VALUE, KEY>::const_iterator const_iterator_inverse;
    typedef typename std::map<VALUE, KEY>::iterator iterator_inverse;

    //
methods

    const_iterator begin() const;
    iterator begin();
    const_iterator end() const;
    iterator end();
    const_iterator_inverse inverse_begin() const;
    iterator_inverse inverse_begin();
    const_iterator_inverse inverse_end() const;
    iterator_inverse inverse_end();
    size_t size() const;
    bool empty() const;
    const std::map<KEY, VALUE>& getDirectMap() const;
    const std::map<VALUE, KEY>& getInverseMap() const;
    void clear();
    void insert(const KEY& k, const VALUE& v);
    bool direct(const KEY& k, VALUE& out_v) const;
    bool hasKey(const KEY& k) const;
    bool hasValue(const VALUE& v) const;
    VALUE direct(const KEY& k) const;
    bool inverse(const VALUE& v, KEY& out_k) const;
    KEY inverse(const VALUE& v) const;
    const_iterator find_key(const KEY& k) const;
    iterator find_key(const KEY& k);
    const_iterator_inverse find_value(const VALUE& v) const;
    iterator_inverse find_value(const VALUE& v);
};

Methods

const std::map<KEY, VALUE>& getDirectMap() const

Return a read-only reference to the internal map KEY->VALUES.

const std::map<VALUE, KEY>& getInverseMap() const

Return a read-only reference to the internal map KEY->VALUES.

void clear()

Clear the contents of the bi-map.

void insert(const KEY& k, const VALUE& v)

Insert a new pair KEY<->VALUE in the bi-map.

bool direct(const KEY& k, VALUE& out_v) const

Get the value associated the given key, KEY->VALUE, returning false if not present.

Returns:

false on key not found.

See also:

inverse, hasKey, hasValue

bool hasKey(const KEY& k) const

Return true if the given key ‘k’ is in the bi-map.

See also:

hasValue, direct, inverse

bool hasValue(const VALUE& v) const

Return true if the given value ‘v’ is in the bi-map.

See also:

hasKey, direct, inverse

VALUE direct(const KEY& k) const

Get the value associated the given key, KEY->VALUE, raising an exception if not present.

Parameters:

std::exception

On key not present in the bi-map.

See also:

inverse, hasKey, hasValue

bool inverse(const VALUE& v, KEY& out_k) const

Get the key associated the given value, VALUE->KEY, returning false if not present.

Returns:

false on value not found.

See also:

direct, hasKey, hasValue

KEY inverse(const VALUE& v) const

Get the key associated the given value, VALUE->KEY, raising an exception if not present.

Returns:

false on value not found.

See also:

direct, hasKey, hasValue