HashMap< KeyType, ValueType, HashFunctionType, TypeOfCriticalSectionToUse > Class Template Reference
juce_core » containers

Holds a set of mappings between some key/value pairs. More...

## Classes

struct | Iterator
| Iterates over the items in a HashMap. More...

## Public Types

using | ScopedLockType = typename TypeOfCriticalSectionToUse::ScopedLockType
| Returns the type of scoped lock to use for locking this array. More...

## Public Member Functions

| HashMap (int numberOfSlots=defaultHashTableSize, HashFunctionType hashFunction=HashFunctionType())
| Creates an empty hash-map. More...
| ~HashMap ()
| Destructor. More...
void | clear ()
| Removes all values from the map. More...
int | size () const noexcept
| Returns the current number of items in the map. More...
ValueType | operator[] (KeyTypeParameter keyToLookFor) const
| Returns the value corresponding to a given key. More...
ValueType & | getReference (KeyTypeParameter keyToLookFor)
| Returns a reference to the value corresponding to a given key. More...
bool | contains (KeyTypeParameter keyToLookFor) const
| Returns true if the map contains an item with the specified key. More...
bool | containsValue (ValueTypeParameter valueToLookFor) const
| Returns true if the hash contains at least one occurrence of a given value. More...
void | set (KeyTypeParameter newKey, ValueTypeParameter newValue)
| Adds or replaces an element in the hash-map. More...
void | remove (KeyTypeParameter keyToRemove)
| Removes an item with the given key. More...
void | removeValue (ValueTypeParameter valueToRemove)
| Removes all items with the given value. More...
void | remapTable (int newNumberOfSlots)
| Remaps the hash-map to use a different number of slots for its hash function. More...
int | getNumSlots () const noexcept
| Returns the number of slots which are available for hashing. More...
template<class OtherHashMapType >
void | swapWith (OtherHashMapType &otherHashMap) noexcept
| Efficiently swaps the contents of two hash-maps. More...
const TypeOfCriticalSectionToUse & | getLock () const noexcept
| Returns the CriticalSection that locks this structure. More...
Iterator | begin () const noexcept
| Returns a start iterator for the values in this tree. More...
Iterator | end () const noexcept
| Returns an end iterator for the values in this tree. More...

## Detailed Description

### template<typename KeyType, typename ValueType, class HashFunctionType = DefaultHashFunctions, class TypeOfCriticalSectionToUse = DummyCriticalSection>
class HashMap< KeyType, ValueType, HashFunctionType, TypeOfCriticalSectionToUse >

Holds a set of mappings between some key/value pairs.

The types of the key and value objects are set as template parameters. You can also specify a class to supply a hash function that converts a key value into an hashed integer. This class must have the form:

struct MyHashGenerator
{
int generateHash (MyKeyType key, int upperLimit) const
{
// The function must return a value 0 <= x < upperLimit
return someFunctionOfMyKeyType (key) % upperLimit;
}
};

Like the Array class, the key and value types are expected to be copy-by-value types, so if you define them to be pointer types, this class won't delete the objects that they point to.

If you don't supply a class for the HashFunctionType template parameter, the default one provides some simple mappings for strings and ints.

HashMap<int, String> hash;
hash.set (1, "item1");
hash.set (2, "item2");
DBG (hash [1]); // prints "item1"
DBG (hash [2]); // prints "item2"
// This iterates the map, printing all of its key -> value pairs..
for (HashMap<int, String>::Iterator i (hash); i.next();)
DBG (i.getKey() << " -> " << i.getValue());

Template Parameters

  HashFunctionType | The class of hash function, which must be copy-constructible.

See also
  CriticalSection, DefaultHashFunctions, NamedValueSet, SortedSet

## Member Typedef Documentation

## ScopedLockType

template<typename KeyType, typename ValueType, class HashFunctionType = DefaultHashFunctions, class TypeOfCriticalSectionToUse = DummyCriticalSection>

using HashMap< KeyType, ValueType, HashFunctionType, TypeOfCriticalSectionToUse >::ScopedLockType = typename TypeOfCriticalSectionToUse::ScopedLockType

Returns the type of scoped lock to use for locking this array.

## Constructor & Destructor Documentation

## HashMap()

template<typename KeyType, typename ValueType, class HashFunctionType = DefaultHashFunctions, class TypeOfCriticalSectionToUse = DummyCriticalSection>

HashMap< KeyType, ValueType, HashFunctionType, TypeOfCriticalSectionToUse >::HashMap | ( | int | numberOfSlots = `defaultHashTableSize`,
|  | HashFunctionType | hashFunction = `HashFunctionType()`
| ) |  |

explicit

Creates an empty hash-map.

Parameters

  numberOfSlots | Specifies the number of hash entries the map will use. This will be the "upperLimit" parameter that is passed to your generateHash() function. The number of hash slots will grow automatically if necessary, or it can be remapped manually using remapTable().
  hashFunction | An instance of HashFunctionType, which will be copied and stored to use with the HashMap. This parameter can be omitted if HashFunctionType has a default constructor.

References Array< ElementType, TypeOfCriticalSectionToUse, minimumAllocatedSize >::insertMultiple().

## ~HashMap()

template<typename KeyType, typename ValueType, class HashFunctionType = DefaultHashFunctions, class TypeOfCriticalSectionToUse = DummyCriticalSection>

HashMap< KeyType, ValueType, HashFunctionType, TypeOfCriticalSectionToUse >::~HashMap | ( |  | ) |

Destructor.

References HashMap< KeyType, ValueType, HashFunctionType, TypeOfCriticalSectionToUse >::clear().

## Member Function Documentation

## clear()

template<typename KeyType, typename ValueType, class HashFunctionType = DefaultHashFunctions, class TypeOfCriticalSectionToUse = DummyCriticalSection>

void HashMap< KeyType, ValueType, HashFunctionType, TypeOfCriticalSectionToUse >::clear | ( |  | ) |

Removes all values from the map.

Note that this will clear the content, but won't affect the number of slots (see remapTable and getNumSlots).

References HashMap< KeyType, ValueType, HashFunctionType, TypeOfCriticalSectionToUse >::getLock(), Array< ElementType, TypeOfCriticalSectionToUse, minimumAllocatedSize >::getUnchecked(), Array< ElementType, TypeOfCriticalSectionToUse, minimumAllocatedSize >::set(), and Array< ElementType, TypeOfCriticalSectionToUse, minimumAllocatedSize >::size().

Referenced by HashMap< KeyType, ValueType, HashFunctionType, TypeOfCriticalSectionToUse >::~HashMap().

## size()

template<typename KeyType, typename ValueType, class HashFunctionType = DefaultHashFunctions, class TypeOfCriticalSectionToUse = DummyCriticalSection>

int HashMap< KeyType, ValueType, HashFunctionType, TypeOfCriticalSectionToUse >::size | ( |  | ) | const

noexcept

Returns the current number of items in the map.

## operator[]()

template<typename KeyType, typename ValueType, class HashFunctionType = DefaultHashFunctions, class TypeOfCriticalSectionToUse = DummyCriticalSection>

ValueType HashMap< KeyType, ValueType, HashFunctionType, TypeOfCriticalSectionToUse >::operator[] | ( | KeyTypeParameter | keyToLookFor | ) | const

Returns the value corresponding to a given key.

If the map doesn't contain the key, a default instance of the value type is returned.

Parameters

  keyToLookFor | the key of the item being requested

References HashMap< KeyType, ValueType, HashFunctionType, TypeOfCriticalSectionToUse >::getLock().

## getReference()

template<typename KeyType, typename ValueType, class HashFunctionType = DefaultHashFunctions, class TypeOfCriticalSectionToUse = DummyCriticalSection>

ValueType& HashMap< KeyType, ValueType, HashFunctionType, TypeOfCriticalSectionToUse >::getReference | ( | KeyTypeParameter | keyToLookFor | ) |

Returns a reference to the value corresponding to a given key.

If the map doesn't contain the key, a default instance of the value type is added to the map and a reference to this is returned.

Parameters

  keyToLookFor | the key of the item being requested

References HashMap< KeyType, ValueType, HashFunctionType, TypeOfCriticalSectionToUse >::getLock(), HashMap< KeyType, ValueType, HashFunctionType, TypeOfCriticalSectionToUse >::getNumSlots(), Array< ElementType, TypeOfCriticalSectionToUse, minimumAllocatedSize >::getUnchecked(), HashMap< KeyType, ValueType, HashFunctionType, TypeOfCriticalSectionToUse >::remapTable(), and Array< ElementType, TypeOfCriticalSectionToUse, minimumAllocatedSize >::set().

Referenced by HashMap< KeyType, ValueType, HashFunctionType, TypeOfCriticalSectionToUse >::set().

## contains()

template<typename KeyType, typename ValueType, class HashFunctionType = DefaultHashFunctions, class TypeOfCriticalSectionToUse = DummyCriticalSection>

bool HashMap< KeyType, ValueType, HashFunctionType, TypeOfCriticalSectionToUse >::contains | ( | KeyTypeParameter | keyToLookFor | ) | const

Returns true if the map contains an item with the specified key.

References HashMap< KeyType, ValueType, HashFunctionType, TypeOfCriticalSectionToUse >::getLock().

## containsValue()

template<typename KeyType, typename ValueType, class HashFunctionType = DefaultHashFunctions, class TypeOfCriticalSectionToUse = DummyCriticalSection>

bool HashMap< KeyType, ValueType, HashFunctionType, TypeOfCriticalSectionToUse >::containsValue | ( | ValueTypeParameter | valueToLookFor | ) | const

Returns true if the hash contains at least one occurrence of a given value.

References HashMap< KeyType, ValueType, HashFunctionType, TypeOfCriticalSectionToUse >::getLock(), HashMap< KeyType, ValueType, HashFunctionType, TypeOfCriticalSectionToUse >::getNumSlots(), and Array< ElementType, TypeOfCriticalSectionToUse, minimumAllocatedSize >::getUnchecked().

## set()

template<typename KeyType, typename ValueType, class HashFunctionType = DefaultHashFunctions, class TypeOfCriticalSectionToUse = DummyCriticalSection>

void HashMap< KeyType, ValueType, HashFunctionType, TypeOfCriticalSectionToUse >::set | ( | KeyTypeParameter | newKey,
|  | ValueTypeParameter | newValue
| ) |  |

Adds or replaces an element in the hash-map.

If there's already an item with the given key, this will replace its value. Otherwise, a new item will be added to the map.

References HashMap< KeyType, ValueType, HashFunctionType, TypeOfCriticalSectionToUse >::getReference().

## remove()

template<typename KeyType, typename ValueType, class HashFunctionType = DefaultHashFunctions, class TypeOfCriticalSectionToUse = DummyCriticalSection>

void HashMap< KeyType, ValueType, HashFunctionType, TypeOfCriticalSectionToUse >::remove | ( | KeyTypeParameter | keyToRemove | ) |

Removes an item with the given key.

References HashMap< KeyType, ValueType, HashFunctionType, TypeOfCriticalSectionToUse >::getLock(), HashMap< KeyType, ValueType, HashFunctionType, TypeOfCriticalSectionToUse >::getNumSlots(), Array< ElementType, TypeOfCriticalSectionToUse, minimumAllocatedSize >::getUnchecked(), and Array< ElementType, TypeOfCriticalSectionToUse, minimumAllocatedSize >::set().

## removeValue()

template<typename KeyType, typename ValueType, class HashFunctionType = DefaultHashFunctions, class TypeOfCriticalSectionToUse = DummyCriticalSection>

void HashMap< KeyType, ValueType, HashFunctionType, TypeOfCriticalSectionToUse >::removeValue | ( | ValueTypeParameter | valueToRemove | ) |

Removes all items with the given value.

References HashMap< KeyType, ValueType, HashFunctionType, TypeOfCriticalSectionToUse >::getLock(), HashMap< KeyType, ValueType, HashFunctionType, TypeOfCriticalSectionToUse >::getNumSlots(), Array< ElementType, TypeOfCriticalSectionToUse, minimumAllocatedSize >::getUnchecked(), and Array< ElementType, TypeOfCriticalSectionToUse, minimumAllocatedSize >::set().

## remapTable()

template<typename KeyType, typename ValueType, class HashFunctionType = DefaultHashFunctions, class TypeOfCriticalSectionToUse = DummyCriticalSection>

void HashMap< KeyType, ValueType, HashFunctionType, TypeOfCriticalSectionToUse >::remapTable | ( | int | newNumberOfSlots | ) |

Remaps the hash-map to use a different number of slots for its hash function.

Each slot corresponds to a single hash-code, and each one can contain multiple items.

See also
  getNumSlots()

References HashMap< KeyType, ValueType, HashFunctionType, TypeOfCriticalSectionToUse >::getLock(), HashMap< KeyType, ValueType, HashFunctionType, TypeOfCriticalSectionToUse >::getNumSlots(), Array< ElementType, TypeOfCriticalSectionToUse, minimumAllocatedSize >::getUnchecked(), Array< ElementType, TypeOfCriticalSectionToUse, minimumAllocatedSize >::insertMultiple(), Array< ElementType, TypeOfCriticalSectionToUse, minimumAllocatedSize >::set(), and Array< ElementType, TypeOfCriticalSectionToUse, minimumAllocatedSize >::swapWith().

Referenced by HashMap< KeyType, ValueType, HashFunctionType, TypeOfCriticalSectionToUse >::getReference().

## getNumSlots()

template<typename KeyType, typename ValueType, class HashFunctionType = DefaultHashFunctions, class TypeOfCriticalSectionToUse = DummyCriticalSection>

int HashMap< KeyType, ValueType, HashFunctionType, TypeOfCriticalSectionToUse >::getNumSlots | ( |  | ) | const

noexcept

Returns the number of slots which are available for hashing.

Each slot corresponds to a single hash-code, and each one can contain multiple items.

See also
  getNumSlots()

References Array< ElementType, TypeOfCriticalSectionToUse, minimumAllocatedSize >::size().

Referenced by HashMap< KeyType, ValueType, HashFunctionType, TypeOfCriticalSectionToUse >::containsValue(), HashMap< KeyType, ValueType, HashFunctionType, TypeOfCriticalSectionToUse >::getReference(), HashMap< KeyType, ValueType, HashFunctionType, TypeOfCriticalSectionToUse >::Iterator::next(), HashMap< KeyType, ValueType, HashFunctionType, TypeOfCriticalSectionToUse >::remapTable(), HashMap< KeyType, ValueType, HashFunctionType, TypeOfCriticalSectionToUse >::remove(), HashMap< KeyType, ValueType, HashFunctionType, TypeOfCriticalSectionToUse >::removeValue(), and HashMap< KeyType, ValueType, HashFunctionType, TypeOfCriticalSectionToUse >::Iterator::resetToEnd().

## swapWith()

template<typename KeyType, typename ValueType, class HashFunctionType = DefaultHashFunctions, class TypeOfCriticalSectionToUse = DummyCriticalSection>
template<class OtherHashMapType >

void HashMap< KeyType, ValueType, HashFunctionType, TypeOfCriticalSectionToUse >::swapWith | ( | OtherHashMapType & | otherHashMap | ) |

noexcept

Efficiently swaps the contents of two hash-maps.

References HashMap< KeyType, ValueType, HashFunctionType, TypeOfCriticalSectionToUse >::getLock(), and Array< ElementType, TypeOfCriticalSectionToUse, minimumAllocatedSize >::swapWith().

## getLock()

template<typename KeyType, typename ValueType, class HashFunctionType = DefaultHashFunctions, class TypeOfCriticalSectionToUse = DummyCriticalSection>

const TypeOfCriticalSectionToUse& HashMap< KeyType, ValueType, HashFunctionType, TypeOfCriticalSectionToUse >::getLock | ( |  | ) | const

noexcept

Returns the CriticalSection that locks this structure.

To lock, you can call getLock().enter() and getLock().exit(), or preferably use an object of ScopedLockType as an RAII lock for it.

Referenced by HashMap< KeyType, ValueType, HashFunctionType, TypeOfCriticalSectionToUse >::clear(), HashMap< KeyType, ValueType, HashFunctionType, TypeOfCriticalSectionToUse >::contains(), HashMap< KeyType, ValueType, HashFunctionType, TypeOfCriticalSectionToUse >::containsValue(), HashMap< KeyType, ValueType, HashFunctionType, TypeOfCriticalSectionToUse >::getReference(), HashMap< KeyType, ValueType, HashFunctionType, TypeOfCriticalSectionToUse >::operator[](), HashMap< KeyType, ValueType, HashFunctionType, TypeOfCriticalSectionToUse >::remapTable(), HashMap< KeyType, ValueType, HashFunctionType, TypeOfCriticalSectionToUse >::remove(), HashMap< KeyType, ValueType, HashFunctionType, TypeOfCriticalSectionToUse >::removeValue(), and HashMap< KeyType, ValueType, HashFunctionType, TypeOfCriticalSectionToUse >::swapWith().

## begin()

template<typename KeyType, typename ValueType, class HashFunctionType = DefaultHashFunctions, class TypeOfCriticalSectionToUse = DummyCriticalSection>

Iterator HashMap< KeyType, ValueType, HashFunctionType, TypeOfCriticalSectionToUse >::begin | ( |  | ) | const

noexcept

Returns a start iterator for the values in this tree.

References HashMap< KeyType, ValueType, HashFunctionType, TypeOfCriticalSectionToUse >::Iterator::next().

## end()

template<typename KeyType, typename ValueType, class HashFunctionType = DefaultHashFunctions, class TypeOfCriticalSectionToUse = DummyCriticalSection>

Iterator HashMap< KeyType, ValueType, HashFunctionType, TypeOfCriticalSectionToUse >::end | ( |  | ) | const

noexcept

Returns an end iterator for the values in this tree.

References HashMap< KeyType, ValueType, HashFunctionType, TypeOfCriticalSectionToUse >::Iterator::resetToEnd().

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

- juce_HashMap.h

HashMap
Holds a set of mappings between some key/value pairs.
Definition: juce_HashMap.h:104
HashMap::Iterator
Iterates over the items in a HashMap.
Definition: juce_HashMap.h:400
DBG
#define DBG(textToWrite)
Writes a string to the standard error stream.
Definition: juce_PlatformDefs.h:122
HashMap::Iterator::next
bool next() noexcept
Moves to the next item, if one is available.
Definition: juce_HashMap.h:414
HashMap::set
void set(KeyTypeParameter newKey, ValueTypeParameter newValue)
Adds or replaces an element in the hash-map.
Definition: juce_HashMap.h:233
BlocksProtocol::key
Definition: juce_BlocksProtocolDefinitions.h:308