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.