|
| RWTPtrHashMap () |
|
| RWTPtrHashMap (const container_type &m) |
|
| RWTPtrHashMap (const RWTPtrHashMap< K, T, H, EQ, A > &rws) |
|
| RWTPtrHashMap (RWTPtrHashMap< K, T, H, EQ, A > &&map) |
|
| RWTPtrHashMap (container_type &&map) |
|
template<typename InputIterator > |
| RWTPtrHashMap (InputIterator first, InputIterator last) |
|
| RWTPtrHashMap (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 |
|
RWTPtrHashMap< K, T, H, EQ, A > & | operator= (const RWTPtrHashMap< K, T, H, EQ, A > &rhs) |
|
RWTPtrHashMap< K, T, H, EQ, A > & | operator= (const container_type &rhs) |
|
RWTPtrHashMap< K, T, H, EQ, A > & | operator= (RWTPtrHashMap< K, T, H, EQ, A > &&rhs) |
|
RWTPtrHashMap< K, T, H, EQ, A > & | operator= (container_type &&rhs) |
|
mapped_type & | operator[] (key_type key) |
|
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) |
|
key_type | removeKeyAndValue (const K *key, mapped_type &retVal) |
|
void | resize (size_type sz) |
|
container_type & | std () |
|
const container_type & | std () const |
|
void | swap (RWTPtrHashMap< 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 RWTPtrHashMap< K, T, H, EQ, A > &coll) |
|
template<class K , class T , class H , class EQ , class A > |
RWFile & | operator<< (RWFile &file, const RWTPtrHashMap< K, T, H, EQ, A > &coll) |
|
template<class K , class T , class H , class EQ , class A > |
RWvistream & | operator>> (RWvistream &strm, RWTPtrHashMap< K, T, H, EQ, A > &coll) |
|
template<class K , class T , class H , class EQ , class A > |
RWFile & | operator>> (RWFile &file, RWTPtrHashMap< K, T, H, EQ, A > &coll) |
|
template<class K , class T , class H , class EQ , class A > |
RWvistream & | operator>> (RWvistream &strm, RWTPtrHashMap< K, T, H, EQ, A > *&p) |
|
template<class K , class T , class H , class EQ , class A > |
RWFile & | operator>> (RWFile &file, RWTPtrHashMap< 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 RWTPtrHashMap< 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
.
- Note
- Any two keys that are equivalent must hash to the same value.
Key equality is determined by an equality function of type EQ
, which takes two arguments convertible to type K
and returns a value of type bool
.
- Note
- Any two keys that are equivalent are disallowed for this container.
This class does not allow duplicate keys, that is, keys that are equivalent to a key already in the collection. Use the class RWTPtrHashMultiMap if you need multiple keys to be equivalent to each other. Equality is based on the comparison object, not on operator==()
.
The value
type must have operator==()
defined. This requirement is imposed by the C++ Standard Library.
- Synopsis
- See also
Class RWTPtrHashMultiMap offers the same interface to a pointer-based collection that accepts multiple keys that compare equal to each other.
Class rw_hashmap<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/tphdict.h>
#include <rw/cstring.h>
struct simple_hash
{
unsigned long
return (unsigned long)(n ? n * size_t (ref [0]) : 0);
}
};
int main ()
{
contest;
contest.
insert(&snd,
new int(3));
contest.
insert(&snd,
new int(6));
std::cout << "There was "
<< " second place winner." << std::endl;
return 0;
}
Program Output:
There was 1 second place winner.
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. It is important that the equality object associated with this container successfully exclude duplicate entries since using this method when there are duplicates results in unpredictable behavior.
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*>>
bool RWTPtrHashMap< K, T, H, EQ, A >::contains |
( |
const K * |
key | ) |
const |
|
inline |
Returns true
if there exists a key j
in self that compares equal to *key
, otherwise returns false
.
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*>>
const K* RWTPtrHashMap< K, T, H, EQ, A >::find |
( |
const K * |
key | ) |
const |
|
inline |
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* RWTPtrHashMap< 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*>>
const T* RWTPtrHashMap< K, T, H, EQ, A >::findValue |
( |
const K * |
key | ) |
const |
|
inline |
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*>>
Attempts to insert val into self. If an existing item with an equivalent key is already in the collection, val is not inserted, and an iterator to the existing item is returned. Otherwise inserts val and 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 hash 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 RWTPtrHashMap< K, T, H, EQ, A >::insert |
( |
InputIterator |
first, |
|
|
InputIterator |
last |
|
) |
| |
|
inline |
Inserts the elements in the range [first, last) into self. If the element is already present in the collection, it will be ignored.
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*>>
Adds key with associated item a to the collection. Returns true
if the insertion is successful, otherwise returns false
. The function will return true
unless the collection already holds an association with the equivalent key.
template<class K, class T, class H = RWTHash<K>, class EQ = std::equal_to<K>, class A = std::allocator<K*>>
Looks up key and returns a reference to its associated item. If the key is not in the dictionary, is is added with an associated uninitialized pointer of type mapped_type. Because of this, if there is a possibility that a key will not be in the dictionary, this operator should only be used as an lvalue.
template<class K, class T, class H = RWTHash<K>, class EQ = std::equal_to<K>, class A = std::allocator<K*>>
Removes the first association a
in self such that the expression ((*fn)(a,d))
is true
and returns its key. Returns rwnil if there is no such association. 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 find(key)
would succeed, erases the pair associated with key, places the value part in retVal, and returns key. Otherwise, returns rwnil.
template<class K, class T, class H = RWTHash<K>, class EQ = std::equal_to<K>, class A = std::allocator<K*>>
Changes the capacity of self by creating a new hashmap with a capacity of sz. Then copies every association in self into the new container and finally swaps the internal representation of the new container with the internal representation of self.
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.