rw_hashset(3C++) rw_hashset(3C++)
Namerw_hashset - Rogue Wave library class
Synopsis
#include <rw/rwstl/hashset.h>
rw_hashset<T,Hash,EQ> set;
Description
Class rw_hashset<T,Hash,EQ> maintains a collection of T, implemented as a
hash table in which there may not be more than one instance of any given
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_hashset provides for iterators
that reference its elements. Operations that alter the contents of
rw_hashset may invalidate other iterators that reference the container.
Since the contents of rw_hashset 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().
Persistence
None
Public Typedefs
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_hashset<T,Hash,EQ> are forward iterators.
typedef (scoped Iterator) iterator;
typedef (scoped ConsIterator) const_iterator;
Public Constructors
rw_hashset<T,Hash,EQ>(size_type sz = 1024,
const Hash& h = Hash(),
const EQ& eq = EQ());
Construct an empty rw_hashset<T,Hash,EQ> with sz slots, using h as the
hash object, and eq as the equality comparator.
Page 1
rw_hashset(3C++) rw_hashset(3C++)
rw_hashset<T,Hash,EQ>(const rw_hashset<T,Hash,EQ>& set);
Construct an rw_hashset<T,Hash,EQ> which is a copy of set. Each element
from set will be copied into self.
rw_hashset<T,Hash,EQ>(const_iterator first,
const_iterator bound
size_type sz=1024,
const Hash& h = Hash(),
const EQ& eq = EQ());
Construct an rw_hashset<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_hashset<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_hashset<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. If
there are items in the range which test EQ, then only the first such item
will be inserted into self.
Public Destructor
~rw_hashset<T,Hash,EQ>();
The destructor releases the memory used by the container's
implementation.
Public Operators
rw_hashset<T,Hash,EQ>&
operator=(const rw_hashset<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_hashset<T,Hash,EQ> & rhs) const;
Returns true if self and rhs have the same number of elements, and for
Page 2
rw_hashset(3C++) rw_hashset(3C++)
each item in self there is an item in rhs which tests EQ.
Accessors
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.
Page 3
rw_hashset(3C++) rw_hashset(3C++)
onst_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.
Const Public Member Functions
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;
Page 4
rw_hashset(3C++) rw_hashset(3C++)
Returns the number of items currently held in self.
Mutators
void
clear();
A synonym for erase(begin(),end());
size_type
erase(const key_type& key);
If there is an item EQ to key, it is removed, and 1 is returned.
Otherwise, 0 is returned.
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 bounded
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);
If there is no item in self EQ to val then inserts val, returning a pair
with an iterator referencing the new element and true. Otherwise,
returns a pair with an iterator referencing the matching value_type and
false.
size_type
insert(iterator ignore, const value_type& val);
If there is no item in self EQ to val then inserts val, returning 1.
Otherwise, does nothing and returns 0. 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.
Page 5
rw_hashset(3C++) rw_hashset(3C++)
size_type
insert(const value_type* first, const value_type* bound);
For each element in the range beginning with first and bounded by bound,
if there is no item in self EQ to that element, the element is copied
into self, or if there is such an element, it is skipped. 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,
if there is no item in self EQ to that element, the element is copied
into self, or if there is such an element, it is skipped. Returns the
number of elements inserted.
void
swap(rw_hashset<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.
Special Methods for Sets
size_type
count(const key_type& key) const;
Returns 1 if self contains key, else 0.
const_iterator
find(const key_type& key) const;
Returns a const_iterator referencing key, if it is contained in self,
else returns end().
iterator
find(const key_type& key);
Returns an iterator referencing key, if it 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
Page 6
rw_hashset(3C++) rw_hashset(3C++)
elements into the new table. Can be very expensive if self holds many
elements.
Page 7