A hash-based associative container of pointer types, which allows duplicate keys.
More...
|
| RWTPtrHashMultiMap () |
|
| RWTPtrHashMultiMap (const container_type &m) |
|
| RWTPtrHashMultiMap (const RWTPtrHashMultiMap< K, T, H, EQ, A > &rws) |
|
| RWTPtrHashMultiMap (RWTPtrHashMultiMap< K, T, H, EQ, A > &&map) |
|
| RWTPtrHashMultiMap (container_type &&map) |
|
template<typename InputIterator > |
| RWTPtrHashMultiMap (InputIterator first, InputIterator last) |
|
| RWTPtrHashMultiMap (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) |
|
void | applyToKeyAndValue (void(*fn)(const K *, const T *, void *), void *d) const |
|
void | applyToKeyAndValue (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 | insertKeyAndValue (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 |
|
RWTPtrHashMultiMap< K, T, H, EQ, A > & | operator= (const RWTPtrHashMultiMap< K, T, H, EQ, A > &rhs) |
|
RWTPtrHashMultiMap< K, T, H, EQ, A > & | operator= (const container_type &rhs) |
|
RWTPtrHashMultiMap< K, T, H, EQ, A > & | operator= (RWTPtrHashMultiMap< K, T, H, EQ, A > &&rhs) |
|
RWTPtrHashMultiMap< 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 (RWTPtrHashMultiMap< 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 RWTPtrHashMultiMap< K, T, H, EQ, A > &coll) |
|
template<class K , class T , class H , class EQ , class A > |
RWFile & | operator<< (RWFile &file, const RWTPtrHashMultiMap< K, T, H, EQ, A > &coll) |
|
template<class K , class T , class H , class EQ , class A > |
RWvistream & | operator>> (RWvistream &strm, RWTPtrHashMultiMap< K, T, H, EQ, A > &coll) |
|
template<class K , class T , class H , class EQ , class A > |
RWFile & | operator>> (RWFile &file, RWTPtrHashMultiMap< K, T, H, EQ, A > &coll) |
|
template<class K , class T , class H , class EQ , class A > |
RWvistream & | operator>> (RWvistream &strm, RWTPtrHashMultiMap< K, T, H, EQ, A > *&p) |
|
template<class K , class T , class H , class EQ , class A > |
RWFile & | operator>> (RWFile &file, RWTPtrHashMultiMap< 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 RWTPtrHashMultiMap< K, T, H, EQ, A >
This class maintains a pointer-based collection of associations of type std::pair<K* const, T*>. These pairs are stored according to a hash object of type H
. Class T
is the type pointed to by the items in the collection. 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
- See also
Class RWTPtrHashMap offers the same interface to a pointer-based collection that does not accept multiple keys that compare equal to each other.
rw_hashmultimap<K*,T*,hasher,key_equal,A> is the C++ Standard Library-style collection that serves as the underlying implementation for this class.
- Persistence
- Isomorphic
- Example
#include <iostream>
#include <functional>
#include <rw/tphmmap.h>
#include <rw/cstring.h>
struct simple_hash
{
unsigned long
operator()(const RWCString& ref) const {
return (unsigned long)(n ? n * size_t (ref [0]) : 0);
}
};
int main ()
{
RWCString snd = "Second";
contest;
contest.
insert(
new RWCString(
"First"),
new int(7));
contest.
insert(&snd,
new int(3));
contest.
insert(&snd,
new int(6));
contest.
insert(
new RWCString(
"Third"),
new int(2));
<< " second place winners." << std::endl;
return 0;
}
Program Output:
There were 2 second place winners.
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 an iterator referring to the first element in the container.
If the container is empty, returns end().
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 first element in the container.
If the container is empty, returns end().
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 first element in the container.
If the container is empty, returns end().
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*>>
Removes all associations from the collection and uses operator delete
to destroy the objects pointed to by the keys and their associated items. Do not use this method if it is possible that the container holds multiple pointers to the same object because the results are unpredictable.
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*>>
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*>>
Removes the items in the range [first, last) from the collection. Returns an iterator that points to the next item in the collection, or end() if the last item in the collection was removed.
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
, returns j
, otherwise returns rwnil.
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*>>
const K* RWTPtrHashMultiMap< K, T, H, EQ, A >::findKeyAndValue |
( |
const K * |
key, |
|
|
const T *& |
tr |
|
) |
| const |
|
inline |
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
, returns the item associated with j
, otherwise returns rwnil.
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 should be inserted at a different location according to the container's comparison object.
template<class K, class T, class H = RWTHash<K>, class EQ = std::equal_to<K>, class A = std::allocator<K*>>
template<typename InputIterator >
void RWTPtrHashMultiMap< K, T, H, EQ, A >::insert |
( |
InputIterator |
first, |
|
|
InputIterator |
last |
|
) |
| |
|
inline |
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.
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.