## wxHashTable

This class provides hash table functionality for wxWindows, and for an application if it wishes. Data can be hashed on an integer or string key.

Derived from

wxObject

Include files

<wx/hash.h>

Example

Below is an example of using a hash table.

      wxHashTable table(KEY_STRING);

      wxPoint *point = new wxPoint(100, 200);
      table.Put("point 1", point);

      ....

      wxPoint *found_point = (wxPoint *)table.Get("point 1");

A hash table is implemented as an array of pointers to lists. When no data has been stored, the hash table takes only a little more space than this array (default size is 1000). When a data item is added, an integer is constructed from the integer or string key that is within the bounds of the array. If the array element is NULL, a new (keyed) list is created for the element. Then the data object is appended to the list, storing the key in case other data objects need to be stored in the list also (when a 'collision' occurs).

Retrieval involves recalculating the array index from the key, and searching along the keyed list for the data object whose stored key matches the passed key. Obviously this is quicker when there are fewer collisions, so hashing will become inefficient if the number of items to be stored greatly exceeds the size of the hash table.

See also

wxList

Members

wxHashTable::wxHashTable
wxHashTable::~wxHashTable
wxHashTable::BeginFind
wxHashTable::Clear
wxHashTable::Delete
wxHashTable::DeleteContents
wxHashTable::Get
wxHashTable::MakeKey
wxHashTable::Next
wxHashTable::Put
wxList::GetCount

### wxHashTable::wxHashTable

wxHashTable(unsigned int key_type, int size = 1000)

Constructor. key_type is one of wxKEY_INTEGER, or wxKEY_STRING, and indicates what sort of keying is required. size is optional.

### wxHashTable::~wxHashTable

~wxHashTable()

Destroys the hash table.

### wxHashTable::BeginFind

void BeginFind()

The counterpart of Next. If the application wishes to iterate through all the data in the hash table, it can call BeginFind and then loop on Next.

### wxHashTable::Clear

void Clear()

Clears the hash table of all nodes (but as usual, doesn't delete user data).

### wxHashTable::Delete

wxObject * Delete(long key)

wxObject * Delete(const wxString& key)

Deletes entry in hash table and returns the user's data (if found).

### wxHashTable::DeleteContents

void DeleteContents(bool flag)

If set to TRUE data stored in hash table will be deleted when hash table object is destroyed.

### wxHashTable::Get

wxObject * Get(long key)

wxObject * Get(const char* key)

Gets data from the hash table, using an integer or string key (depending on which has table constructor was used).

### wxHashTable::MakeKey

long MakeKey(const wxString& string)

Makes an integer key out of a string. An application may wish to make a key explicitly (for instance when combining two data values to form a key).

### wxHashTable::Next

wxNode * Next()

If the application wishes to iterate through all the data in the hash table, it can call BeginFind and then loop on Next. This function returns a wxNode pointer (or NULL if there are no more nodes). See the description for wxNode. The user will probably only wish to use the wxNode::Data function to retrieve the data; the node may also be deleted.

### wxHashTable::Put

void Put(long key, wxObject *object)

void Put(const char* key, wxObject *object)

Inserts data into the hash table, using an integer or string key (depending on which has table constructor was used). The key string is copied and stored by the hash table implementation.

### wxList::GetCount

size_t GetCount() const

Returns the number of elements in the hash table.