# Poco

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

# class SimpleHashTable

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

## Description

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

In comparison to a HashTable, this class handles collisions by sequentially searching the next free location. This also means that the maximum size of this table is limited, i.e. if the hash table is full, it will throw an exception and that this class does not support remove operations. On the plus side it is faster than the HashTable.

This class is NOT thread safe.

## Member Summary

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

## Nested Classes

### class HashEntry

## Types Aliases

### HashTableVector

using HashTableVector = std::vector < HashEntry * >;

## Constructors

### SimpleHashTable

SimpleHashTable(
UInt32 capacity = 251
);

Creates the SimpleHashTable.

### SimpleHashTable

SimpleHashTable(
const SimpleHashTable & ht
);

## Destructor

### ~SimpleHashTable

~SimpleHashTable();

Destroys the SimpleHashTable.

## Member Functions

### capacity

UInt32 capacity() const;

### clear

void clear();

### currentState

HashStatistic currentState(
bool details = false
) const;

Returns the current internal state

### exists

bool exists(
const Key & key
) const;

### existsRaw

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

### 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

### operator =

SimpleHashTable & operator = (
const SimpleHashTable & ht
);

### operator []

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

### operator []

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

### 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 SimpleHashTable

### swap

void swap(
SimpleHashTable & ht
) noexcept;

### 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