Member Functions | |||
begin() capacity() clear() count() empty() end() |
equal_range() erase() fill_ratio() find() insert() lower_bound() |
operator=() operator==() resize() size() swap() upper_bound() |
#include <rw/rwstdex/hashmset.h> rw_hashmultiset<T,Hash,EQ> mset;
rw_hashmultiset requires the Standard C++ Library.
Class rw_hashmultiset<T,Hash,EQ> maintains a collection of T, implemented as a hash table in which there may be many EQ instances of T. Since this is a value based collection, objects are copied into and out of the collection. As with all classes that meet the ANSI associative container specification, rw_hashmap provides for iterators that reference its elements. Operations that alter the contents of rw_hashmap may invalidate other iterators that reference the container. Since the contents of rw_hashmap are in pseudo-random order, the only iterator ranges that will usually make sense are the results of calling equal_range(key), and the entire range from begin() to end().
None
typedef T key_type; typedef T value_type; // or ... "const K" typedef Hash key_hash; typedef EQ key_equal; typedef (unsigned) size_type; //from rw_slist typedef (int) difference_type; // from rw_slist typedef (value_type&) reference; typedef (const value_type&) const_reference; //from rw_slist
Iterators over rw_hashmultiset<T,Hash,EQ> are forward iterators.
typedef (scoped Iterator) iterator; typedef (scoped ConsIterator) const_iterator;
rw_hashmultiset<T,Hash,EQ>(size_type sz = 1024, const Hash& h = Hash(), const EQ& eq = EQ());
Construct an empty rw_hashmultiset<T,Hash,EQ> with sz slots, using h as the hash object, and eq as the equality comparator.
rw_hashmultiset<T,Hash,EQ>(const rw_hashmultiset<T,Hash,EQ>& mset);
Construct an rw_hashmultiset<T,Hash,EQ> which is a copy of mset. Each element from mset will be copied into self.
rw_hashmultiset<T,Hash,EQ>(const_iterator first, const_iterator bound size_type sz=1024, const Hash& h = Hash(), const EQ& eq = EQ());
Construct an rw_hashmultiset<T,Hash,EQ> with sz slots, using h as the hash object, and eq as the equality comparator, containing a copy of each item referenced by the range starting with first and bounded by bound.
rw_hashmultiset<T,Hash,EQ>(const value_type* first, const value_type* bound size_type sz=1024, const Hash& h = Hash(), const EQ& eq = EQ());
Construct an rw_hashmultiset<T,Hash,EQ> with sz slots, using h as the hash object, and eq as the equals object, containing a copy of each item referenced by the range including first and bounded by bound.
~rw_hashmultiset<T,Hash,EQ>();
The destructor releases the memory used by the container's implementation.
rw_hashmultiset<T,Hash,EQ>& operator=(const rw_hashmultiset<T,Hash,EQ>& rhs);
Sets self to have the same capacity, Hash and EQ as rhs, removes all self's current contents, and replaces them with copies of the elements in rhs.
bool operator==(const rw_hashmultiset<T,Hash,EQ> & rhs) const;
Returns true if self and rhs have the same number of elements, and for each distinct instance of T in self, both self and rhs have the same count of instances.
iterator begin();
The iterator returned references the first item in self. If self is empty, the iterator is equal to end(). Note that because items are stored in pseudo-random order, this iterator might reference any item that has been stored in self.
const_iterator begin() const;
The iterator returned references the first item in self. If self is empty, the iterator is equal to end(). Note that because items are stored in pseudo-random order, this iterator might reference any item that has been stored in self.
iterator end();
The iterator returned marks the location "off the end" of self. It may not be dereferenced.
const_iterator end() const;
The iterator returned marks the location "off the end" of self. It may not be dereferenced.
pair<const_iterator, const_iterator> equal_range(const key_type key) const;
Returns pair<const_iterator, const_iterator>(lower_bound(key), upper_bound(key)). Upper and lower bound have special meaning for hash-based collections. See discussion elsewhere.
pair<iterator, iterator> equal_range(const key_type key);
Returns pair<iterator, iterator>(lower_bound(key), upper_bound(key)). Upper and lower bound have special meaning for hash-based collections. See discussion elsewhere.
const_iterator lower_bound(const key_type& key) const;
Returns the lower bound of key in self. This has a special meaning for hash-based collections. See discussion elsewhere.
iterator lower_bound(const key_type& key);
Returns the lower bound of key in self. This has a special meaning for hash-based collections. See discussion elsewhere.
const_iterator upper_bound(const key_type& key) const;
Returns the upper bound of key in self. This has a special meaning for hash-based collections. See discussion elsewhere.
iterator upper_bound(const key_type& key);
Returns the upper bound of key in self. This has a special meaning for hash-based collections. See discussion elsewhere.
size_type capacity() const;
Returns the number of slots in the hash table that self uses.
bool empty() const;
Returns true if self is empty.
float fill_ratio() const;
Returns the result of calculating size()/capacity().
size_type size() const;
Returns the number of items currently held in self.
void clear();
A synonym for erase(begin(),end());
size_type erase(const key_type& key);
Removes all items in self which are EQ to key, and returns the number of removed elements.
iterator erase(iterator iter);
Removes the element referenced by iter and returns an iterator referencing the "next" element. If iter does not reference an item in self, the result is undefined.
iterator erase(iterator first, iterator bound);
Removes each element in the range which begins with first and is bound by bound. Returns an iterator referencing bound. If first does not reference an item in self (and if first and bound are not equal), the effect is undefined.
pair<iterator,bool> insert(const value_type& val);
Inserts val, returning a pair with an iterator referencing the new element and true.
size_type insert(iterator ignore, const value_type& val);
Inserts val, returning 1. Note that the first argument is provided only for conformance with the ANSI associative container specification, and is ignored by the method, since hash table look up can be done in constant time.
size_type insert(const value_type* first, const value_type* bound);
For each element in the range beginning with first and bounded by bound, the element is copied into self. Returns the number of elements inserted.
size_type insert(const_iterator first, const_iterator bound);
For each element in the range beginning with first and bounded by bound, the element is copied into self. Returns the number of elements inserted.
void swap(rw_hashmultiset<T,Hash,EQ>& other);
Exchanges the contents of self with other including the Hash and EQ objects. This method does not copy or destroy any of the items exchanged but exchanges the underlying hash tables.
size_type count(const key_type& key) const;
Returns the number of items in self which are EQ to key.
const_iterator find(const key_type& key) const;
Returns a const_iterator referencing some item EQ to key if such an item is contained in self, else returns end().
iterator find(const key_type& key);
Returns an iterator referencing some item EQ to key if such a item is contained in self, else returns end().
void resize(size_type sz);
Resizes self's hash table to have sz slots; and re-hashes all self's elements into the new table. Can be very expensive if self holds many elements.