## Public API Reference

- Main Page
- Modules
- Namespaces
- Classes
- Files
- Related Pages

- Alphabetical List
- Class List
- Class Hierarchy
- Class Members

# csHash< T, K > Class Template Reference
[Containers]

A generic hash table class, which grows dynamically and whose buckets are unsorted arrays. More...

`#include <csutil/hash.h>`

Inheritance diagram for csHash< T, K >:

[legend]
List of all members.

## Public Member Functions

bool | Contains (const K &key) const
| Returns whether at least one element matches the given key.
| csHash (const csHash< T > &o)
| Copy constructor.
| csHash (size_t size=23, size_t grow_rate=5, size_t max_size=20000)
| Construct a hash table with an array of the given size, which for optimisation reasons should be a prime number.
bool | Delete (const K &key, const T &value)
| Delete all the elements matching the given key and value.
bool | DeleteAll (const K &key)
| Delete all the elements matching the given key.
void | DeleteAll ()
| Delete all the elements.
void | DeleteElement (GlobalIterator &iterator)
| Delete the element pointed by the iterator.
void | Empty ()
| Delete all the elements. (Idiomatic alias for DeleteAll().).
T & | Get (const K &key, T &fallback)
| Get the first element matching the given key, or `fallback` if there is none.
const T & | Get (const K &key, const T &fallback) const
| Get the first element matching the given key, or `fallback` if there is none.
csArray< T > | GetAll (const K &key) const
| Get all the elements with the given key, or empty if there are none.
T * | GetElementPointer (const K &key)
| Get a pointer to the first element matching the given key, or 0 if there is none.
const T * | GetElementPointer (const K &key) const
| Get a pointer to the first element matching the given key, or 0 if there is none.
GlobalIterator | GetIterator () const
| Return an iterator for the hash, to iterate over all elements.
Iterator | GetIterator (const K &key) const
| Return an iterator for the hash, to iterate only over the elements with the given key.
size_t | GetSize () const
| Get the number of elements in the hash.
bool | In (const K &key) const
| Returns whether at least one element matches the given key.
bool | IsEmpty () const
| Return true if the hash is empty.
void | Put (const K &key, const T &value)
| Add an element to the hash table.
void | PutFirst (const K &key, const T &value)
| Add an element to the hash table, overwriting if the key already exists.
void | PutUnique (const K &key, const T &value)
| Add an element to the hash table, overwriting if the key already exists.

## Protected Attributes

csArray< csArray< Element > > | Elements
size_t | Modulo

## Friends

class | GlobalIterator
class | Iterator

## Classes

struct | Element
class | GlobalIterator
| An iterator class for the hash. More...
class | Iterator
| An iterator class for the hash. More...

## Detailed Description

### template<class T, class K = unsigned int>
class csHash< T, K >

A generic hash table class, which grows dynamically and whose buckets are unsorted arrays.

The hash value of a key is computed using csHashComputer<>, two keys are compared using csComparator<>. You need to provide appropriate specializations of those templates if you want use non-integral types (other than const char*, csStrKey and csString for which appropriate specializations are already provided) or special hash algorithms.

Definition at line 249 of file hash.h.

## Constructor & Destructor Documentation

template<class T, class K = unsigned int>
csHash< T, K >::csHash | ( | size_t | size = `23`,
|  | size_t | grow_rate = `5`,
|  | size_t | max_size = `20000`
| ) | `[inline]`

Construct a hash table with an array of the given size, which for optimisation reasons should be a prime number.

Grow_rate is the rate at which the hash table grows: Size doubles once there are size/grow_rate collisions. It will not grow after it reaches max_size.

Here are a few primes: 7, 11, 19, 29, 59, 79, 101, 127, 151, 199, 251, 307, 401, 503, 809, 1009, 1499, 2003, 3001, 5003, 12263, 25247, 36923, 50119, 70951, 90313, 104707.

For a bigger list go to http://www.utm.edu/research/primes/

Definition at line 323 of file hash.h.

template<class T, class K = unsigned int>
csHash< T, K >::csHash | ( | const csHash< T > & | o | ) | `[inline]`

| Copy constructor. Definition at line 331 of file hash.h.

## Member Function Documentation

template<class T, class K = unsigned int>
bool csHash< T, K >::Contains | ( | const K & | key | ) | const`[inline]`

| Returns whether at least one element matches the given key. Definition at line 400 of file hash.h. Referenced by csSet< csPtrKey< KnownFont > >::Contains().

template<class T, class K = unsigned int>
bool csHash< T, K >::Delete | ( | const K & | key,
|  | const T & | value
| ) | `[inline]`

| Delete all the elements matching the given key and value. Definition at line 528 of file hash.h. Referenced by csSet< csPtrKey< KnownFont > >::Delete().

template<class T, class K = unsigned int>
bool csHash< T, K >::DeleteAll | ( | const K & | key | ) | `[inline]`

| Delete all the elements matching the given key. Definition at line 509 of file hash.h.

template<class T, class K = unsigned int>
void csHash< T, K >::DeleteAll | ( |  | ) | `[inline]`

| Delete all the elements. Definition at line 496 of file hash.h. Referenced by csSet< csPtrKey< KnownFont > >::DeleteAll().

template<class T, class K = unsigned int>
void csHash< T, K >::DeleteElement | ( | GlobalIterator & | iterator | ) | `[inline]`

| Delete the element pointed by the iterator. This is safe for this iterator, not for the others. Definition at line 730 of file hash.h.

template<class T, class K = unsigned int>
void csHash< T, K >::Empty | ( |  | ) | `[inline]`

| Delete all the elements. (Idiomatic alias for DeleteAll().). Definition at line 506 of file hash.h.

template<class T, class K = unsigned int>
T& csHash< T, K >::Get | ( | const K & | key,
|  | T & | fallback
| ) | `[inline]`

| Get the first element matching the given key, or `fallback` if there is none. Definition at line 480 of file hash.h.

template<class T, class K = unsigned int>
const T& csHash< T, K >::Get | ( | const K & | key,
|  | const T & | fallback
| ) | const`[inline]`

| Get the first element matching the given key, or `fallback` if there is none. Definition at line 461 of file hash.h. Referenced by csHashReversible< T, K >::GetKey().

template<class T, class K = unsigned int>
csArray<T> csHash< T, K >::GetAll | ( | const K & | key | ) | const`[inline]`

| Get all the elements with the given key, or empty if there are none. Definition at line 353 of file hash.h.

template<class T, class K = unsigned int>
T* csHash< T, K >::GetElementPointer | ( | const K & | key | ) | `[inline]`

| Get a pointer to the first element matching the given key, or 0 if there is none. Definition at line 442 of file hash.h.

template<class T, class K = unsigned int>
const T* csHash< T, K >::GetElementPointer | ( | const K & | key | ) | const`[inline]`

| Get a pointer to the first element matching the given key, or 0 if there is none. Definition at line 423 of file hash.h. Referenced by csHashReversible< T, K >::GetKeyPointer().

template<class T, class K = unsigned int>
GlobalIterator csHash< T, K >::GetIterator | ( |  | ) | const`[inline]`

Return an iterator for the hash, to iterate over all elements.

Warning:
  Modifying the hash (except with DeleteElement()) while you have open iterators will result in undefined behaviour.

Definition at line 754 of file hash.h.

template<class T, class K = unsigned int>
Iterator csHash< T, K >::GetIterator | ( | const K & | key | ) | const`[inline]`

Return an iterator for the hash, to iterate only over the elements with the given key.

Warning:
  Modifying the hash (except with DeleteElement()) while you have open iterators will result in undefined behaviour.

Definition at line 744 of file hash.h.

template<class T, class K = unsigned int>
size_t csHash< T, K >::GetSize | ( |  | ) | const`[inline]`

| Get the number of elements in the hash. Definition at line 548 of file hash.h. Referenced by csSet< csPtrKey< KnownFont > >::GetSize().

template<class T, class K = unsigned int>
bool csHash< T, K >::In | ( | const K & | key | ) | const`[inline]`

Returns whether at least one element matches the given key.

Remarks:
  This is rigidly equivalent to Contains(key), but may be considered more idiomatic by some.

Definition at line 416 of file hash.h.

template<class T, class K = unsigned int>
bool csHash< T, K >::IsEmpty | ( |  | ) | const`[inline]`

Return true if the hash is empty.

Remarks:
  Rigidly equivalent to `return GetSize() == 0`, but more idiomatic.

Definition at line 558 of file hash.h.

template<class T, class K = unsigned int>
void csHash< T, K >::Put | ( | const K & | key,
|  | const T & | value
| ) | `[inline]`

Add an element to the hash table.

Remarks:
  If `key' is already present, does NOT replace the existing value, but merely adds `value' as an additional value of `key'. To retrieve all values for a given key, use GetAll(). If you instead want to replace an existing value for 'key', use PutUnique().

Reimplemented in csHashReversible< T, K >.

Definition at line 342 of file hash.h.

Referenced by csSet< csPtrKey< KnownFont > >::AddNoTest(), and csHashReversible< T, K >::Put().

template<class T, class K = unsigned int>
void csHash< T, K >::PutFirst | ( | const K & | key,
|  | const T & | value
| ) | `[inline]`

Add an element to the hash table, overwriting if the key already exists.

Deprecated:
  Use PutUnique() instead.

Definition at line 394 of file hash.h.

template<class T, class K = unsigned int>
void csHash< T, K >::PutUnique | ( | const K & | key,
|  | const T & | value
| ) | `[inline]`

| Add an element to the hash table, overwriting if the key already exists. Definition at line 369 of file hash.h.

The documentation for this class was generated from the following file:

- csutil/hash.h