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
ConstIterator
typedef typename HashEntryMap::const_iterator ConstIterator;
HashEntryMap
typedef std::map < Key, Value > HashEntryMap;
HashTableVector
typedef HashEntryMap * * HashTableVector;
Iterator
typedef typename HashEntryMap::iterator 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