Maintains a collection of key pointers, each with an associated item of pointer type stored according to both a hash object and the key insertion order. Allows duplicate keys.
More...
|
| | RWTPtrOrderedHashMultiMap () |
| |
| | RWTPtrOrderedHashMultiMap (const container_type &m) |
| |
| | RWTPtrOrderedHashMultiMap (const RWTPtrOrderedHashMultiMap< K, T, H, EQ, A > &rws) |
| |
| | RWTPtrOrderedHashMultiMap (RWTPtrOrderedHashMultiMap< K, T, H, EQ, A > &&map) |
| |
| | RWTPtrOrderedHashMultiMap (container_type &&map) |
| |
| template<typename InputIterator > |
| | RWTPtrOrderedHashMultiMap (InputIterator first, InputIterator last) |
| |
| | RWTPtrOrderedHashMultiMap (const H &h, size_type sz=64) |
| |
| void | apply (void(*fn)(const K *, const T *, void *), void *d) const |
| |
| void | apply (void(*fn)(const K *, mapped_type &, void *), void *d) |
| |
| iterator | begin () |
| |
| const_iterator | begin () const |
| |
| size_type | capacity () const |
| |
| const_iterator | cbegin () const |
| |
| const_iterator | cend () const |
| |
| void | clear () |
| |
| void | clearAndDestroy () |
| |
| bool | contains (bool(*fn)(value_type, void *), void *d) const |
| |
| bool | contains (const K *key) const |
| |
| iterator | end () |
| |
| const_iterator | end () const |
| |
| size_type | entries () const |
| |
| iterator | erase (iterator pos) |
| |
| iterator | erase (iterator first, iterator last) |
| |
| float | fillRatio () const |
| |
| value_type | find (bool(*fn)(value_type, void *), void *d) const |
| |
| const K * | find (const K *key) const |
| |
| const K * | findKeyAndValue (const K *key, mapped_type &tr) |
| |
| const K * | findKeyAndValue (const K *key, const T *&tr) const |
| |
| mapped_type | findValue (const K *key) |
| |
| const T * | findValue (const K *key) const |
| |
| iterator | insert (iterator hint, const_reference val) |
| |
| template<typename InputIterator > |
| void | insert (InputIterator first, InputIterator last) |
| |
| bool | insert (key_type key, mapped_type a) |
| |
| bool | isEmpty () const |
| |
| const K * | maxElement () const |
| |
| const K * | minElement () const |
| |
| size_type | occurrencesOf (bool(*fn)(value_type, void *), void *d) const |
| |
| size_type | occurrencesOf (const K *key) const |
| |
| RWTPtrOrderedHashMultiMap< K, T, H, EQ, A > & | operator= (const RWTPtrOrderedHashMultiMap< K, T, H, EQ, A > &rhs) |
| |
| RWTPtrOrderedHashMultiMap< K, T, H, EQ, A > & | operator= (const container_type &rhs) |
| |
| RWTPtrOrderedHashMultiMap< K, T, H, EQ, A > & | operator= (RWTPtrOrderedHashMultiMap< K, T, H, EQ, A > &&rhs) |
| |
| RWTPtrOrderedHashMultiMap< K, T, H, EQ, A > & | operator= (container_type &&rhs) |
| |
| key_type | remove (bool(*fn)(value_type, void *), void *d) |
| |
| key_type | remove (const K *key) |
| |
| size_type | removeAll (bool(*fn)(value_type, void *), void *d) |
| |
| size_type | removeAll (const K *key) |
| |
| void | resize (size_type sz) |
| |
| container_type & | std () |
| |
| const container_type & | std () const |
| |
| void | swap (RWTPtrOrderedHashMultiMap< K, T, H, EQ, A > &rhs) |
| |
|
(Note that these are not member functions.)
|
| template<class K , class T , class H , class EQ , class A > |
| RWvostream & | operator<< (RWvostream &strm, const RWTPtrOrderedHashMultiMap< K, T, H, EQ, A > &coll) |
| |
| template<class K , class T , class H , class EQ , class A > |
| RWFile & | operator<< (RWFile &file, const RWTPtrOrderedHashMultiMap< K, T, H, EQ, A > &coll) |
| |
| template<class K , class T , class H , class EQ , class A > |
| RWvistream & | operator>> (RWvistream &strm, RWTPtrOrderedHashMultiMap< K, T, H, EQ, A > &coll) |
| |
| template<class K , class T , class H , class EQ , class A > |
| RWFile & | operator>> (RWFile &file, RWTPtrOrderedHashMultiMap< K, T, H, EQ, A > &coll) |
| |
| template<class K , class T , class H , class EQ , class A > |
| RWvistream & | operator>> (RWvistream &strm, RWTPtrOrderedHashMultiMap< K, T, H, EQ, A > *&p) |
| |
| template<class K , class T , class H , class EQ , class A > |
| RWFile & | operator>> (RWFile &file, RWTPtrOrderedHashMultiMap< K, T, H, EQ, A > *&p) |
| |
template<class K, class T, class H = RWTHash<K>, class EQ = std::equal_to<K>, class A = std::allocator<K*>>
class RWTPtrOrderedHashMultiMap< K, T, H, EQ, A >
RWTPtrOrderedHashMultiMap maintains a collection of K key pointers, with an associated item that is a pointer of type T. These std::pair<K* const, T*> pairs are stored according to a hash object of type H. RWTPtrOrderedHashMultiMap preserves key insertion order. If the collection already contains items with the same key, the item will be inserted immediately after those items.
Class A is an allocator of objects of class T. For more information about using custom allocators, please see the Essential Tools Module User's Guide.
H must provide a const function that takes a single argument convertible to type K and returns a value of type size_t.
Equivalent keys within the collection are grouped together based on an equality object of type EQ. EQ must ensure this grouping via a function that takes two arguments convertible to type K and returns a value of type bool.
- Note
- Any two keys that are equivalent must hash to the same value.
This class allows multiple keys that are equivalent to each other. Use the class RWTPtrHashMap if you need a collection that does not accept duplicate keys. Equality is based on the comparison object and not on operator==().
The value type must have operator==() defined. This requirement is imposed by the C++ Standard Library.
- Synopsis
#include <rw/tools/tpordhmmap.h>
- See also
Class RWTPtrOrderedHashMap offers the same interface to a pointer-based collection that does not accept multiple keys that compare equal to each other.
rw_orderedhashmultimap<K*,T*,hasher,key_equal,A> is the C++ Standard Library-style collection that serves as the underlying implementation for this class.
- Persistence
- Isomorphic
template<class K, class T, class H = RWTHash<K>, class EQ = std::equal_to<K>, class A = std::allocator<K*>>
template<typename InputIterator >
Constructs a map by copying elements from the range [first, last).
InputIterator is an input iterator type that points to elements that are convertible to value_type objects.
template<class K, class T, class H = RWTHash<K>, class EQ = std::equal_to<K>, class A = std::allocator<K*>>
Returns true if there exists an association a in self such that the expression ((*fn)(a,d)) is true, otherwise returns false. Client data may be passed through parameter d.
template<class K, class T, class H = RWTHash<K>, class EQ = std::equal_to<K>, class A = std::allocator<K*>>
Returns an iterator referring to the element after the last element in the container.
Dereferencing the iterator returned by this function results in undefined behavior.
template<class K, class T, class H = RWTHash<K>, class EQ = std::equal_to<K>, class A = std::allocator<K*>>
If there exists an association a in self such that the expression ((*fn)(a,d)) is true, returns a. Otherwise, returns value_type(rwnil,rwnil). Client data may be passed through parameter d.
template<class K, class T, class H = RWTHash<K>, class EQ = std::equal_to<K>, class A = std::allocator<K*>>
If there exists a key j in self that compares equal to *key, assigns the item associated with j to tr, and returns j. Otherwise, returns rwnil and leaves the value of tr unchanged.
template<class K, class T, class H = RWTHash<K>, class EQ = std::equal_to<K>, class A = std::allocator<K*>>
If there exists a key j in self that compares equal to *key, assigns the item associated with j to tr, and returns j. Otherwise, returns rwnil and leaves the value of tr unchanged.
template<class K, class T, class H = RWTHash<K>, class EQ = std::equal_to<K>, class A = std::allocator<K*>>
Inserts val into self. Returns an iterator to the new item.
The hint parameter indicates where in the collection the new value should be inserted. This value is only a hint, and will be ignored if the value is inserted at a different location according to the container's comparison object.
- Note
- If the collection already contains items with the same key, val will be inserted immediately after those items.
template<class K, class T, class H = RWTHash<K>, class EQ = std::equal_to<K>, class A = std::allocator<K*>>
template<typename InputIterator >
Inserts the elements in the range [first, last) into self.
InputIterator is an input iterator type that points to elements that are convertible to value_type objects.
- Note
- If the collection already contains items with the same key, a copy of the item will be inserted immediately after those items.
template<class K , class T , class H , class EQ , class A >
Looks at the next object on the input stream strm and either creates a new collection off the heap and sets p to point to it, or sets p to point to a previously read instance. If a collection is created off the heap, the application is responsible for deleting it.
template<class K , class T , class H , class EQ , class A >
Looks at the next object from the streamed RWFile file and either creates a new collection off the heap and sets p to point to it, or sets p to point to a previously read instance. If a collection is created off the heap, the application is responsible for deleting it.