Flow 1.0.0
Flow project: Public API.
Public Types | Public Member Functions | Related Functions | List of all members
flow::util::Linked_hash_map< Key, Mapped, Hash, Pred > Class Template Reference

An object of this class is a map that combines the lookup speed of a boost::unordered_map<> and ordering and iterator stability capabilities of an std::list<>. More...

#include <linked_hash_map.hpp>

Public Types

using Value = std::pair< Key const, Mapped >
 Short-hand for key/mapped-value pairs stored in the structure.
 
using size_type = std::size_t
 Type for index into array of items, where items are all applicable objects including Values and Keys.
 
using difference_type = std::ptrdiff_t
 Type for difference of size_types.
 
using Iterator = typename Value_list::iterator
 Type for iterator pointing into a mutable structure of this type.
 
using Const_iterator = typename Value_list::const_iterator
 Type for iterator pointing into an immutable structure of this type.
 
using Reverse_iterator = typename Value_list::reverse_iterator
 Type for reverse iterator pointing into a mutable structure of this type.
 
using Const_reverse_iterator = typename Value_list::const_reverse_iterator
 Type for reverse iterator pointing into an immutable structure of this type.
 
using key_type = Key
 For container compliance (hence the irregular capitalization): Key type.
 
using mapped_type = Mapped
 For container compliance (hence the irregular capitalization): Mapped type.
 
using value_type = Value
 For container compliance (hence the irregular capitalization): Key/Mapped pair type.
 
using hasher = Hash
 For container compliance (hence the irregular capitalization): Hash type.
 
using key_equal = Pred
 For container compliance (hence the irregular capitalization): Pred type.
 
using pointer = Value *
 For container compliance (hence the irregular capitalization): pointer to Key/Mapped pair type.
 
using const_pointer = Value const *
 For container compliance (hence the irregular capitalization): pointer to const Key/Mapped pair type.
 
using reference = Value &
 For container compliance (hence the irregular capitalization): reference to Key/Mapped pair type.
 
using const_reference = Value const &
 For container compliance (hence the irregular capitalization): reference to const Key/Mapped pair type.
 
using iterator = Iterator
 For container compliance (hence the irregular capitalization): Iterator type.
 
using const_iterator = Const_iterator
 For container compliance (hence the irregular capitalization): Const_iterator type.
 

Public Member Functions

 Linked_hash_map (size_type n_buckets=size_type(-1), Hash const &hasher_instance=Hash(), Pred const &key_equal_instance=Pred())
 Constructs empty structure with some basic parameters. More...
 
 Linked_hash_map (std::initializer_list< Value > values, size_type n_buckets=size_type(-1), Hash const &hasher_instance=Hash(), Pred const &key_equal_instance=Pred())
 Constructs structure with some basic parameters, and values initialized from initializer list. More...
 
 Linked_hash_map (Linked_hash_map const &src)
 Constructs object that is a copy of the given source. More...
 
 Linked_hash_map (Linked_hash_map &&src)
 Constructs object by making it equal to the given source, while the given source becomes as-if default-cted. More...
 
Linked_hash_mapoperator= (Linked_hash_map const &src)
 Overwrites this object with a copy of the given source. More...
 
Linked_hash_mapoperator= (Linked_hash_map &&src)
 Overwrites this object making it equal to the given source, while the given source becomes as-if default-cted. More...
 
std::pair< Iterator, bool > insert (Value const &key_and_mapped)
 Attempts to insert the given key/mapped-value pair into the map. More...
 
Iterator find (Key const &key)
 Attempts to find value at the given key in the map. More...
 
Const_iterator find (Key const &key) const
 Attempts to find value at the given key in the map. More...
 
size_type count (Key const &key) const
 Returns the number of times a key is equivalent to the given one is present in the map: either 1 or 0. More...
 
Mapped & operator[] (Key const &key)
 Equivalent to insert(Value(key, Mapped())).first->second (but avoids unnecessarily invoking Mapped()/generally strives for better performance). More...
 
Valuefront ()
 Returns reference to mutable front ("newest") element in the structure; formally equivalent to *(this->newest()). More...
 
Valueback ()
 Returns reference to mutable back ("oldest") element in the structure; formally equivalent to *(--this->past_oldest()). More...
 
Value const & const_front () const
 Returns reference to immutable front ("newest") element in the structure; formally equivalent to *(this->const_newest()). More...
 
Value const & const_back () const
 Returns reference to immutable back ("oldest") element in the structure; formally equivalent to *(--this->const_past_oldest()). More...
 
void touch (Const_iterator const &it)
 Given a valid iterator into the structure, makes the pointed to element "newest" by moving it from wherever it is to be first in the iteration order. More...
 
bool touch (Key const &key)
 Given a key into the structure, makes the corresponding element "newest" by moving it from wherever it is to be first in the iteration order; or does nothing if no such key. More...
 
Iterator erase (Const_iterator const &it)
 Erases the element pointed to by the given valid iterator. More...
 
Iterator erase (Const_iterator const &it_newest, Const_iterator const &it_past_oldest)
 Erases all elements in the range [it_newest, it_past_oldest). More...
 
size_type erase (Key const &key)
 Erases the element with the given key, if it exists. More...
 
void clear ()
 Makes it so that size() == 0.
 
void swap (Linked_hash_map &other)
 Swaps the contents of this structure and other. More...
 
Iterator begin ()
 Synonym of newest(). More...
 
Iterator newest ()
 Returns first, a/k/a "newest," element's iterator. More...
 
Iterator end ()
 Synonym of past_oldest(). More...
 
Iterator past_oldest ()
 Returns one past last, a/k/a "oldest," element's iterator. More...
 
Const_iterator cbegin () const
 Synonym of const_newest(). More...
 
Const_iterator begin () const
 Synonym of cbegin(). More...
 
Const_iterator const_newest () const
 Returns first, a/k/a "newest," element's iterator (to immutable element). More...
 
Const_iterator cend () const
 Synonym of const_past_oldest(). More...
 
Const_iterator end () const
 Synonym of cend(). More...
 
Const_iterator const_past_oldest () const
 Returns one past last, a/k/a "oldest," element's iterator (to immutable element). More...
 
Reverse_iterator rbegin ()
 Synonym of oldest(). More...
 
Reverse_iterator oldest ()
 Returns first, a/k/a "oldest," element's reverse iterator. More...
 
Reverse_iterator rend ()
 Synonym of past_newest(). More...
 
Reverse_iterator past_newest ()
 Returns one past last, a/k/a "newest," element's reverse iterator. More...
 
Const_reverse_iterator crbegin () const
 Synonym of const_oldest(). More...
 
Const_reverse_iterator const_oldest () const
 Returns first, a/k/a "oldest," element's reverse iterator (to immutable element). More...
 
Const_reverse_iterator crend () const
 Synonym of const_past_newest(). More...
 
Const_reverse_iterator const_past_newest () const
 Returns one past last, a/k/a "newest," element's reverse iterator (to immutable element). More...
 
bool empty () const
 Returns true if and only if container is empty. More...
 
size_type size () const
 Returns number of elements stored. More...
 
size_type max_size () const
 Returns max number of elements that can be stored. More...
 

Related Functions

(Note that these are not member functions.)

template<typename Key , typename Mapped , typename Hash , typename Pred >
void swap (Linked_hash_map< Key, Mapped, Hash, Pred > &val1, Linked_hash_map< Key, Mapped, Hash, Pred > &val2)
 Equivalent to val1.swap(val2). More...
 

Detailed Description

template<typename Key, typename Mapped, typename Hash, typename Pred>
class flow::util::Linked_hash_map< Key, Mapped, Hash, Pred >

An object of this class is a map that combines the lookup speed of a boost::unordered_map<> and ordering and iterator stability capabilities of an std::list<>.

The API is generally that of an unordered_map<>. The differences essentially all have to do with iterators. This map introduces a concept of "newness," which determines the iteration order. Moreover, every iterator remains valid except (of course) under erasure of the underlying element. Newness is defined as follows inductively: whenever an element is inserted, it is "newest," thus it is placed at the front of the iterator order. Furthermore, the methods touch() can be used to make any element "newest" (moved to the front of the iterator order). Iterator thus formed orders elements from newest to oldest (hence newest() is begin(), past_oldest() is end()).

Performance expectations: The best way to determine a method's time needs is to imagine what it must do. If it must perform a lookup by key, that is an unordered_map<> lookup resulting in an (at least internal) iterator. If it must insert an element, it is always inserted at the start of a list; and also into an unordered_map<>. If it must erase an element based on an iterator, that element is erased from a list based on that iterator; and also by key from an unordered_map<>. Iteration itself is iteration along a list. But essentially, every operation is either near constant time or constant time. In terms of space needs, this essentially stores the values themselves in a list; and also a copy of each key in an unordered_map<>, which also stores a pointer or list iterator per element.

Thread safety

Same as for unordered_map<>.

Template Parameters
KeyKey type. Same requirements and behavior as unordered_map<> counterpart. Also (is it "in particular"?): Key must be Assignable, which is STL-speak for: If Key x, y are objects of this type, then x = y; is valid and has all the usual semantics. (There are other requirements, but that's the "controversial" one of interest.) In particular, Key cannot be of the form T const – more commonly written as const T (but recall that, say, const char* = char const * really; which is therefore fine here).
MappedThe 2nd (satellite) part of the Value pair type. Same requirements and behavior as unordered_map<> counterpart. Colloquially, in a K->V map, this is V, while formally the values stored are (K, V) pairs.
HashHasher type. Same requirements and behavior as unordered_map<> counterpart. To get a hasher object, one must be able to call: Hash h = Hash(). To then hash a Key, one must be able to call h(key). Typically one will simply define a size_t hash_value(Key) function, which will be activated via the default value for this template parameter. Defaults to boost::hash<Key>.
PredEquality functor type. Same requirements and behavior as unordered_map<> counterpart. Once a functor object Pred e = Pred() is obtained, bool eq = e(a, b) must return whether a equals b, where a and b are keys. Typically operator==() will be used via the default template parameter. Defaults to std::equal_to<Key>.

Constructor & Destructor Documentation

◆ Linked_hash_map() [1/4]

template<typename Key , typename Mapped , typename Hash , typename Pred >
flow::util::Linked_hash_map< Key, Mapped, Hash, Pred >::Linked_hash_map ( size_type  n_buckets = size_type(-1),
Hash const &  hasher_instance = Hash(),
Pred const &  key_equal_instance = Pred() 
)
explicit

Constructs empty structure with some basic parameters.

Parameters
n_bucketsNumber of buckets for the unordered (hash) table. Special value -1 (default) will cause us to use whatever unordered_map<> would use by default.
hasher_instanceInstance of the hash function type (hasher_instance(Key k) should be size_typed hash of key k).
key_equal_instanceInstance of the equality function type (key_equal_instance(Key k1, Key k2) should return true if and only if k1 equals k2).

◆ Linked_hash_map() [2/4]

template<typename Key , typename Mapped , typename Hash , typename Pred >
flow::util::Linked_hash_map< Key, Mapped, Hash, Pred >::Linked_hash_map ( std::initializer_list< Value values,
size_type  n_buckets = size_type(-1),
Hash const &  hasher_instance = Hash(),
Pred const &  key_equal_instance = Pred() 
)
explicit

Constructs structure with some basic parameters, and values initialized from initializer list.

The values are inserted as if insert(v) was called for each pair v in values in reverse order. Since the canonical ordering places the newest (last inserted/touch()ed) element at the front of the ordering, that means that forward iteration through the set (right after this constructor runs) will yield values in the same order as in initializer list values.

Parameters
valuesValues with which to fill the structure after initializing it. Typically you'd provide a series of key/value pairs like this: {{ key1, value1 }, { key2, value2 }, ...}. They will appear in iterated sequence in the same order as they appear in this list.
n_bucketsSee other constructor.
hasher_instanceSee other constructor.
key_equal_instanceSee other constructor.

◆ Linked_hash_map() [3/4]

template<typename Key , typename Mapped , typename Hash , typename Pred >
flow::util::Linked_hash_map< Key, Mapped, Hash, Pred >::Linked_hash_map ( Linked_hash_map< Key, Mapped, Hash, Pred > const &  src)

Constructs object that is a copy of the given source.

Equivalent to operator=(src).

Parameters
srcSource object.

◆ Linked_hash_map() [4/4]

template<typename Key , typename Mapped , typename Hash , typename Pred >
flow::util::Linked_hash_map< Key, Mapped, Hash, Pred >::Linked_hash_map ( Linked_hash_map< Key, Mapped, Hash, Pred > &&  src)

Constructs object by making it equal to the given source, while the given source becomes as-if default-cted.

Parameters
srcSource object which is emptied.

Member Function Documentation

◆ back()

template<typename Key , typename Mapped , typename Hash , typename Pred >
Linked_hash_map< Key, Mapped, Hash, Pred >::Value & flow::util::Linked_hash_map< Key, Mapped, Hash, Pred >::back

Returns reference to mutable back ("oldest") element in the structure; formally equivalent to *(--this->past_oldest()).

All other comments for front() apply analogously.

Returns
Reference to mutable Mapped value directly inside the data structure; or to undefined location if currently empty().

◆ begin() [1/2]

template<typename Key , typename Mapped , typename Hash , typename Pred >
Linked_hash_map< Key, Mapped, Hash, Pred >::Iterator flow::util::Linked_hash_map< Key, Mapped, Hash, Pred >::begin

Synonym of newest().

Returns
See newest().

◆ begin() [2/2]

template<typename Key , typename Mapped , typename Hash , typename Pred >
Linked_hash_map< Key, Mapped, Hash, Pred >::Const_iterator flow::util::Linked_hash_map< Key, Mapped, Hash, Pred >::begin

Synonym of cbegin().

Exists to satisfy the C++11 rangy stuff (which makes for(:) – and other magic – work).

Returns
See cbegin().

◆ cbegin()

template<typename Key , typename Mapped , typename Hash , typename Pred >
Linked_hash_map< Key, Mapped, Hash, Pred >::Const_iterator flow::util::Linked_hash_map< Key, Mapped, Hash, Pred >::cbegin

Synonym of const_newest().

Exists as standard container method (hence the odd formatting).

Returns
See const_newest().

◆ cend()

template<typename Key , typename Mapped , typename Hash , typename Pred >
Linked_hash_map< Key, Mapped, Hash, Pred >::Const_iterator flow::util::Linked_hash_map< Key, Mapped, Hash, Pred >::cend

Synonym of const_past_oldest().

Exists as standard container method (hence the odd formatting).

Returns
See const_past_oldest().

◆ const_back()

template<typename Key , typename Mapped , typename Hash , typename Pred >
Linked_hash_map< Key, Mapped, Hash, Pred >::Value const & flow::util::Linked_hash_map< Key, Mapped, Hash, Pred >::const_back

Returns reference to immutable back ("oldest") element in the structure; formally equivalent to *(--this->const_past_oldest()).

All other comments for const_front() apply analogously.

Returns
Reference to immutable Mapped value directly inside the data structure; or to undefined location if currently empty().

◆ const_front()

template<typename Key , typename Mapped , typename Hash , typename Pred >
Linked_hash_map< Key, Mapped, Hash, Pred >::Value const & flow::util::Linked_hash_map< Key, Mapped, Hash, Pred >::const_front

Returns reference to immutable front ("newest") element in the structure; formally equivalent to *(this->const_newest()).

OK to call when empty(); but behavior undefined if you attempt to access the result in any way if either empty() when this was called; or if !empty() at that time, but the underlying element is erased at time of access. If not empty() when this was called, then resulting reference continues to be valid as long as the underlying element is not erased; however, in the future the reference (while referring to the same element) may not refer to front ("newest") element any longer. (Informally, most uses would only call front() when !empty(), and would access it immediately and but once. However, I'm listing the corner cases above.)

Returns
Reference to immutable Mapped value directly inside the data structure; or to undefined location if currently empty().

◆ const_newest()

template<typename Key , typename Mapped , typename Hash , typename Pred >
Linked_hash_map< Key, Mapped, Hash, Pred >::Const_iterator flow::util::Linked_hash_map< Key, Mapped, Hash, Pred >::const_newest

Returns first, a/k/a "newest," element's iterator (to immutable element).

Returns
Ditto.

◆ const_oldest()

template<typename Key , typename Mapped , typename Hash , typename Pred >
Linked_hash_map< Key, Mapped, Hash, Pred >::Const_reverse_iterator flow::util::Linked_hash_map< Key, Mapped, Hash, Pred >::const_oldest

Returns first, a/k/a "oldest," element's reverse iterator (to immutable element).

Returns
Ditto.

◆ const_past_newest()

template<typename Key , typename Mapped , typename Hash , typename Pred >
Linked_hash_map< Key, Mapped, Hash, Pred >::Const_reverse_iterator flow::util::Linked_hash_map< Key, Mapped, Hash, Pred >::const_past_newest

Returns one past last, a/k/a "newest," element's reverse iterator (to immutable element).

Returns
Ditto.

◆ const_past_oldest()

template<typename Key , typename Mapped , typename Hash , typename Pred >
Linked_hash_map< Key, Mapped, Hash, Pred >::Const_iterator flow::util::Linked_hash_map< Key, Mapped, Hash, Pred >::const_past_oldest

Returns one past last, a/k/a "oldest," element's iterator (to immutable element).

Returns
Ditto.

◆ count()

template<typename Key , typename Mapped , typename Hash , typename Pred >
Linked_hash_map< Key, Mapped, Hash, Pred >::size_type flow::util::Linked_hash_map< Key, Mapped, Hash, Pred >::count ( Key const &  key) const

Returns the number of times a key is equivalent to the given one is present in the map: either 1 or 0.

Parameters
keyKey whose equal to find.
Returns
0 or 1.

◆ crbegin()

template<typename Key , typename Mapped , typename Hash , typename Pred >
Linked_hash_map< Key, Mapped, Hash, Pred >::Const_reverse_iterator flow::util::Linked_hash_map< Key, Mapped, Hash, Pred >::crbegin

Synonym of const_oldest().

Returns
See const_oldest().

◆ crend()

template<typename Key , typename Mapped , typename Hash , typename Pred >
Linked_hash_map< Key, Mapped, Hash, Pred >::Const_reverse_iterator flow::util::Linked_hash_map< Key, Mapped, Hash, Pred >::crend

Synonym of const_past_newest().

Exists as standard container method.

Returns
See const_past_newest().

◆ empty()

template<typename Key , typename Mapped , typename Hash , typename Pred >
bool flow::util::Linked_hash_map< Key, Mapped, Hash, Pred >::empty

Returns true if and only if container is empty.

Same performance as of unordered_map<>.

Returns
Ditto.

◆ end() [1/2]

template<typename Key , typename Mapped , typename Hash , typename Pred >
Linked_hash_map< Key, Mapped, Hash, Pred >::Iterator flow::util::Linked_hash_map< Key, Mapped, Hash, Pred >::end

Synonym of past_oldest().

Exists as standard container method.

Returns
See past_oldest().

◆ end() [2/2]

template<typename Key , typename Mapped , typename Hash , typename Pred >
Linked_hash_map< Key, Mapped, Hash, Pred >::Const_iterator flow::util::Linked_hash_map< Key, Mapped, Hash, Pred >::end

Synonym of cend().

Exists to satisfy the C++11 rangy stuff (which makes for(:) – and other magic – work).

Returns
See cend().

◆ erase() [1/3]

template<typename Key , typename Mapped , typename Hash , typename Pred >
Linked_hash_map< Key, Mapped, Hash, Pred >::Iterator flow::util::Linked_hash_map< Key, Mapped, Hash, Pred >::erase ( Const_iterator const &  it)

Erases the element pointed to by the given valid iterator.

Behavior undefined if it is not valid. it becomes invalid.

Parameters
itIterator of element to erase.
Returns
Iterator one position past (i.e., "older") than it, before *it was removed.

◆ erase() [2/3]

template<typename Key , typename Mapped , typename Hash , typename Pred >
Linked_hash_map< Key, Mapped, Hash, Pred >::Iterator flow::util::Linked_hash_map< Key, Mapped, Hash, Pred >::erase ( Const_iterator const &  it_newest,
Const_iterator const &  it_past_oldest 
)

Erases all elements in the range [it_newest, it_past_oldest).

Behavior undefined if a given iterator is invalid. it_newest becomes invalid.

Parameters
it_newestIterator of first ("newest") element to erase.
it_past_oldestIterator of one past last ("oldest") element to erase.
Returns
it_past_oldest copy.

◆ erase() [3/3]

template<typename Key , typename Mapped , typename Hash , typename Pred >
Linked_hash_map< Key, Mapped, Hash, Pred >::size_type flow::util::Linked_hash_map< Key, Mapped, Hash, Pred >::erase ( Key const &  key)

Erases the element with the given key, if it exists.

Return value indicates various info of interest about what occurred or did not occur.

Parameters
keyKey such that its equal's (if found) element will be erased.
Returns
Number of elements erased (0 or 1).

◆ find() [1/2]

template<typename Key , typename Mapped , typename Hash , typename Pred >
Linked_hash_map< Key, Mapped, Hash, Pred >::Iterator flow::util::Linked_hash_map< Key, Mapped, Hash, Pred >::find ( Key const &  key)

Attempts to find value at the given key in the map.

Key presence is determined according to the Pred template parameter which determines equality of 2 given keys; and via the Hash template parameter that enables efficient hash-based lookup. The returned iterator (if valid) can be used to mutate the elements inside the map.

As long as the value is not removed from the map, the reference will continue to be valid.

Any subsequent writes to the referred to (by returned iterator) area of memory will NOT have the effect of touch(). If you need it, call touch() yourself.

Parameters
keyKey whose equal to find.
Returns
If found, iterator to the key/mapped-value pair with the equivalent key; else this->end().

◆ find() [2/2]

template<typename Key , typename Mapped , typename Hash , typename Pred >
Linked_hash_map< Key, Mapped, Hash, Pred >::Const_iterator flow::util::Linked_hash_map< Key, Mapped, Hash, Pred >::find ( Key const &  key) const

Attempts to find value at the given key in the map.

Key presence is determined according to the Pred template parameter which determines equality of 2 given keys; and via the Hash template parameter that enables efficient hash-based lookup. The returned iterator (if valid) cannot be used to mutate the elements inside the map.

As long as the value is not removed from the map, the iterator will continue to be valid.

Parameters
keyKey whose equal to find.
Returns
If found, iterator to the key/mapped-value pair with the equivalent key; else this->const_past_oldest().

◆ front()

template<typename Key , typename Mapped , typename Hash , typename Pred >
Linked_hash_map< Key, Mapped, Hash, Pred >::Value & flow::util::Linked_hash_map< Key, Mapped, Hash, Pred >::front

Returns reference to mutable front ("newest") element in the structure; formally equivalent to *(this->newest()).

OK to call when empty(); but behavior undefined if you attempt to access the result in any way if either empty() when this was called; or if !empty() at that time, but the underlying element is erased at time of access. If not empty() when this was called, then resulting reference continues to be valid as long as the underlying element is not erased; however, in the future the reference (while referring to the same element) might not refer to front ("newest") element any longer. (Informally, most uses would only call front() when !empty(), and would access it immediately and but once. However, I'm listing the corner cases above.)

Note that if Mapped& x is returned, then although x is mutable, in actuality x.first is const; so only x.second is truly mutable. You must not write to the key (such as via a const_cast<>); doing so will result in undefined behavior.

Returns
Reference to mutable value directly inside the data structure; or to undefined location if currently empty(). Note that only the Mapped part of Value is mutable.

◆ insert()

template<typename Key , typename Mapped , typename Hash , typename Pred >
std::pair< typename Linked_hash_map< Key, Mapped, Hash, Pred >::Iterator, bool > flow::util::Linked_hash_map< Key, Mapped, Hash, Pred >::insert ( Value const &  key_and_mapped)

Attempts to insert the given key/mapped-value pair into the map.

If the key is already present in the map, does nothing. Return value indicates various info of interest about what occurred or did not occur. Key presence is determined according to the Pred template parameter which determines equality of 2 given keys; and via the Hash template parameter that enables efficient hash-based lookup. If inserted, the new element is considered "newest," as if by touch(). If not inserted, the existing element location is not affected.

Parameters
key_and_mappedThe key/mapped-value pair to attempt to insert. This value is copied, and the copy is inserted.
Returns
A pair whose second element is true if and only if the insertion occurred; and whose first element is an iterator pointing to either the newly inserted element or already present one with a key equal to key_and_mapped.first.

◆ max_size()

template<typename Key , typename Mapped , typename Hash , typename Pred >
Linked_hash_map< Key, Mapped, Hash, Pred >::size_type flow::util::Linked_hash_map< Key, Mapped, Hash, Pred >::max_size

Returns max number of elements that can be stored.

Same performance as of unordered_map<> + list<>.

Returns
Ditto.

◆ newest()

template<typename Key , typename Mapped , typename Hash , typename Pred >
Linked_hash_map< Key, Mapped, Hash, Pred >::Iterator flow::util::Linked_hash_map< Key, Mapped, Hash, Pred >::newest

Returns first, a/k/a "newest," element's iterator.

Returns
Ditto.

◆ oldest()

template<typename Key , typename Mapped , typename Hash , typename Pred >
Linked_hash_map< Key, Mapped, Hash, Pred >::Reverse_iterator flow::util::Linked_hash_map< Key, Mapped, Hash, Pred >::oldest

Returns first, a/k/a "oldest," element's reverse iterator.

Returns
Ditto.

◆ operator=() [1/2]

template<typename Key , typename Mapped , typename Hash , typename Pred >
Linked_hash_map< Key, Mapped, Hash, Pred > & flow::util::Linked_hash_map< Key, Mapped, Hash, Pred >::operator= ( Linked_hash_map< Key, Mapped, Hash, Pred > &&  src)

Overwrites this object making it equal to the given source, while the given source becomes as-if default-cted.

Parameters
srcSource object which is emptied (unless it is *this; then no-op).
Returns
*this.

◆ operator=() [2/2]

template<typename Key , typename Mapped , typename Hash , typename Pred >
Linked_hash_map< Key, Mapped, Hash, Pred > & flow::util::Linked_hash_map< Key, Mapped, Hash, Pred >::operator= ( Linked_hash_map< Key, Mapped, Hash, Pred > const &  src)

Overwrites this object with a copy of the given source.

We become equal to src but independent of it to the max extent possible (if you've got pointers stored in there, for example, the pointers are copied, not the values at those pointers). In addition, the hasher instance and equality predicate are copied from src. Finally, a reasonable attempt is made to also make the internal structure of the hash map to be similar to that of `src.

Parameters
srcSource object.
Returns
*this.

◆ operator[]()

template<typename Key , typename Mapped , typename Hash , typename Pred >
Mapped & flow::util::Linked_hash_map< Key, Mapped, Hash, Pred >::operator[] ( Key const &  key)

Equivalent to insert(Value(key, Mapped())).first->second (but avoids unnecessarily invoking Mapped()/generally strives for better performance).

Less formally, it either finds the value at the given key, or if not found inserts one with a default-constructed value; then returns reference to the in-structure stored Mapped value which can be used to to read and/or modify that value directly.

Note that if Mapped& x is returned, then although x is mutable, in actuality x.first is const; so only x.second is truly mutable. You must not write to the key (such as via a const_cast<>); doing so will result in undefined behavior.

If inserted, the new element is considered "newest," as if by touch(). If not inserted, the existing element location is not affected.

As long as the value is not removed from the map, the reference will continue to be valid.

Any subsequent writes to the referred to area of memory will NOT have the effect of touch(). If you need it, call touch() yourself.

Parameters
keyKey whose equal to find or insert if not found.
Returns
Reference to mutable Mapped value directly inside the data structure.

◆ past_newest()

template<typename Key , typename Mapped , typename Hash , typename Pred >
Linked_hash_map< Key, Mapped, Hash, Pred >::Reverse_iterator flow::util::Linked_hash_map< Key, Mapped, Hash, Pred >::past_newest

Returns one past last, a/k/a "newest," element's reverse iterator.

Returns
Ditto.

◆ past_oldest()

template<typename Key , typename Mapped , typename Hash , typename Pred >
Linked_hash_map< Key, Mapped, Hash, Pred >::Iterator flow::util::Linked_hash_map< Key, Mapped, Hash, Pred >::past_oldest

Returns one past last, a/k/a "oldest," element's iterator.

Returns
Ditto.

◆ rbegin()

template<typename Key , typename Mapped , typename Hash , typename Pred >
Linked_hash_map< Key, Mapped, Hash, Pred >::Reverse_iterator flow::util::Linked_hash_map< Key, Mapped, Hash, Pred >::rbegin

Synonym of oldest().

Returns
See oldest().

◆ rend()

template<typename Key , typename Mapped , typename Hash , typename Pred >
Linked_hash_map< Key, Mapped, Hash, Pred >::Reverse_iterator flow::util::Linked_hash_map< Key, Mapped, Hash, Pred >::rend

Synonym of past_newest().

Exists as standard container method.

Returns
See past_newest().

◆ size()

template<typename Key , typename Mapped , typename Hash , typename Pred >
Linked_hash_map< Key, Mapped, Hash, Pred >::size_type flow::util::Linked_hash_map< Key, Mapped, Hash, Pred >::size

Returns number of elements stored.

Same performance as of unordered_map<>.

Returns
Ditto.

◆ swap()

template<typename Key , typename Mapped , typename Hash , typename Pred >
void flow::util::Linked_hash_map< Key, Mapped, Hash, Pred >::swap ( Linked_hash_map< Key, Mapped, Hash, Pred > &  other)

Swaps the contents of this structure and other.

This is a constant-time operation.

Parameters
otherThe other structure.

◆ touch() [1/2]

template<typename Key , typename Mapped , typename Hash , typename Pred >
void flow::util::Linked_hash_map< Key, Mapped, Hash, Pred >::touch ( Const_iterator const &  it)

Given a valid iterator into the structure, makes the pointed to element "newest" by moving it from wherever it is to be first in the iteration order.

Behavior undefined if iterator invalid.

The iterator continues to be valid.

Parameters
itIterator to an element of the structure.

◆ touch() [2/2]

template<typename Key , typename Mapped , typename Hash , typename Pred >
bool flow::util::Linked_hash_map< Key, Mapped, Hash, Pred >::touch ( Key const &  key)

Given a key into the structure, makes the corresponding element "newest" by moving it from wherever it is to be first in the iteration order; or does nothing if no such key.

Return value indicates various info of interest about what occurred or did not occur.

Parameters
keyKey whose equal to find.
Returns
true if the key was found (even if it was already "newest"); false if not found.

Friends And Related Function Documentation

◆ swap()

template<typename Key , typename Mapped , typename Hash , typename Pred >
void swap ( Linked_hash_map< Key, Mapped, Hash, Pred > &  val1,
Linked_hash_map< Key, Mapped, Hash, Pred > &  val2 
)
related

Equivalent to val1.swap(val2).

Parameters
val1Object.
val2Object.

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