# Poco

# template < class Key, class Value, class KeyHashFunction = HashFunction < Key >>

# class HashTable

Library: Foundation
Package: Hashing
Header: Poco/HashTable.h

## Description

A HashTable stores a key value pair that can be looked up via a hashed key.

Collision handling is done via overflow maps(!). With small hash tables performance of this data struct will be closer to that a map than a hash table, i.e. slower. On the plus side, this class offers remove operations. Also HashTable full errors are not possible. If a fast HashTable implementation is needed and the remove operation is not required, use SimpleHashTable instead.

This class is NOT thread safe.

## Member Summary

Member Functions: clear, currentState, exists, existsRaw, get, getKeyRaw, getRaw, hash, insert, insertRaw, maxCapacity, operator =, operator [], remove, removeRaw, resize, size, update, updateRaw

## Types Aliases

### ConstIterator

using ConstIterator = typename HashEntryMap::const_iterator;

### HashEntryMap

using HashEntryMap = std::map < Key, Value >;

### HashTableVector

using HashTableVector = HashEntryMap * *;

### Iterator

using Iterator = typename HashEntryMap::iterator;

## Constructors

### HashTable

HashTable(
UInt32 initialSize = 251
);

Creates the HashTable.

### HashTable

HashTable(
const HashTable & ht
);

## Destructor

### ~HashTable

~HashTable();

Destroys the HashTable.

## Member Functions

### clear

void clear();

### currentState

HashStatistic currentState(
bool details = false
) const;

Returns the current internal state

### exists

bool exists(
const Key & key
);

### existsRaw

bool existsRaw(
const Key & key,
UInt32 hsh
);

### get

const Value & get(
const Key & key
) const;

Throws an exception if the value does not exist

### get

Value & get(
const Key & key
);

Throws an exception if the value does not exist

### get

bool get(
const Key & key,
Value & v
) const;

Sets v to the found value, returns false if no value was found

### getKeyRaw

const Key & getKeyRaw(
const Key & key,
UInt32 hsh
);

Throws an exception if the key does not exist. returns a reference to the internally stored key. Useful when someone does an insert and wants for performance reason only to store a pointer to the key in another collection

### getRaw

const Value & getRaw(
const Key & key,
UInt32 hsh
) const;

Throws an exception if the value does not exist

### getRaw

bool getRaw(
const Key & key,
UInt32 hsh,
Value & v
) const;

Sets v to the found value, returns false if no value was found

### hash

UInt32 hash(
const Key & key
) const;

### insert

UInt32 insert(
const Key & key,
const Value & value
);

Returns the hash value of the inserted item. Throws an exception if the entry was already inserted

### insertRaw

Value & insertRaw(
const Key & key,
UInt32 hsh,
const Value & value
);

Returns the hash value of the inserted item. Throws an exception if the entry was already inserted

### maxCapacity

UInt32 maxCapacity() const;

### operator =

HashTable & operator = (
const HashTable & ht
);

### operator []

const Value & operator[] (
const Key & key
) const;

### operator []

Value & operator[] (
const Key & key
);

### remove

void remove(
const Key & key
);

### removeRaw

void removeRaw(
const Key & key,
UInt32 hsh
);

Performance version, allows to specify the hash value

### resize

void resize(
UInt32 newSize
);

Resizes the hashtable, rehashes all existing entries. Expensive!

### size

std::size_t size() const;

Returns the number of elements already inserted into the HashTable

### update

UInt32 update(
const Key & key,
const Value & value
);

Returns the hash value of the inserted item. Replaces an existing entry if it finds one

### updateRaw

void updateRaw(
const Key & key,
UInt32 hsh,
const Value & value
);

Returns the hash value of the inserted item. Replaces an existing entry if it finds one