Loading...
Searching...
No Matches
juce::HashMap< KeyType, ValueType, HashFunctionType, TypeOfCriticalSectionToUse > Class Template Reference

Detailed Description

template<typename KeyType, typename ValueType, class HashFunctionType = DefaultHashFunctions, class TypeOfCriticalSectionToUse = DummyCriticalSection>
class juce::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.

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..
DBG (i.getKey() << " -> " << i.getValue());
void set(KeyTypeParameter newKey, ValueTypeParameter newValue)
Adds or replaces an element in the hash-map.
Definition juce_HashMap.h:244
HashMap(int numberOfSlots=defaultHashTableSize, HashFunctionType hashFunction=HashFunctionType())
Creates an empty hash-map.
Definition juce_HashMap.h:133
Iterates over the items in a HashMap.
Definition juce_HashMap.h:412
bool next() noexcept
Moves to the next item, if one is available.
Definition juce_HashMap.h:425
Template Parameters
HashFunctionTypeThe class of hash function, which must be copy-constructible.
See also
CriticalSection, DefaultHashFunctions, NamedValueSet, SortedSet

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.

Public Member Functions

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

Member Typedef Documentation

◆ ScopedLockType

template<typename KeyType, typename ValueType, class HashFunctionType = DefaultHashFunctions, class TypeOfCriticalSectionToUse = DummyCriticalSection>
using juce::HashMap< KeyType, ValueType, HashFunctionType, TypeOfCriticalSectionToUse >::ScopedLockType = typename TypeOfCriticalSectionToUse::ScopedLockType

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

Constructors and Destructors

◆ HashMap()

template<typename KeyType, typename ValueType, class HashFunctionType = DefaultHashFunctions, class TypeOfCriticalSectionToUse = DummyCriticalSection>
juce::HashMap< KeyType, ValueType, HashFunctionType, TypeOfCriticalSectionToUse >::HashMap ( int numberOfSlots = defaultHashTableSize,
HashFunctionType hashFunction = HashFunctionType() )
explicit

Creates an empty hash-map.

Parameters
numberOfSlotsSpecifies 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().
hashFunctionAn 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.

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

◆ ~HashMap()

template<typename KeyType, typename ValueType, class HashFunctionType = DefaultHashFunctions, class TypeOfCriticalSectionToUse = DummyCriticalSection>
juce::HashMap< KeyType, ValueType, HashFunctionType, TypeOfCriticalSectionToUse >::~HashMap ( )

Destructor.

References clear().

Member Functions

◆ clear()

template<typename KeyType, typename ValueType, class HashFunctionType = DefaultHashFunctions, class TypeOfCriticalSectionToUse = DummyCriticalSection>
void juce::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 getLock().

Referenced by ~HashMap().

◆ size()

template<typename KeyType, typename ValueType, class HashFunctionType = DefaultHashFunctions, class TypeOfCriticalSectionToUse = DummyCriticalSection>
int juce::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 juce::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
keyToLookForthe key of the item being requested

References getLock().

◆ getReference()

template<typename KeyType, typename ValueType, class HashFunctionType = DefaultHashFunctions, class TypeOfCriticalSectionToUse = DummyCriticalSection>
ValueType & juce::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
keyToLookForthe key of the item being requested

References getLock(), getNumSlots(), and remapTable().

Referenced by set().

◆ contains()

template<typename KeyType, typename ValueType, class HashFunctionType = DefaultHashFunctions, class TypeOfCriticalSectionToUse = DummyCriticalSection>
bool juce::HashMap< KeyType, ValueType, HashFunctionType, TypeOfCriticalSectionToUse >::contains ( KeyTypeParameter keyToLookFor) const

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

References getLock().

◆ containsValue()

template<typename KeyType, typename ValueType, class HashFunctionType = DefaultHashFunctions, class TypeOfCriticalSectionToUse = DummyCriticalSection>
bool juce::HashMap< KeyType, ValueType, HashFunctionType, TypeOfCriticalSectionToUse >::containsValue ( ValueTypeParameter valueToLookFor) const

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

References getLock(), and getNumSlots().

◆ set()

template<typename KeyType, typename ValueType, class HashFunctionType = DefaultHashFunctions, class TypeOfCriticalSectionToUse = DummyCriticalSection>
void juce::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 getReference().

◆ remove()

template<typename KeyType, typename ValueType, class HashFunctionType = DefaultHashFunctions, class TypeOfCriticalSectionToUse = DummyCriticalSection>
void juce::HashMap< KeyType, ValueType, HashFunctionType, TypeOfCriticalSectionToUse >::remove ( KeyTypeParameter keyToRemove)

Removes an item with the given key.

References getLock(), and getNumSlots().

◆ removeValue()

template<typename KeyType, typename ValueType, class HashFunctionType = DefaultHashFunctions, class TypeOfCriticalSectionToUse = DummyCriticalSection>
void juce::HashMap< KeyType, ValueType, HashFunctionType, TypeOfCriticalSectionToUse >::removeValue ( ValueTypeParameter valueToRemove)

Removes all items with the given value.

References getLock(), and getNumSlots().

◆ remapTable()

template<typename KeyType, typename ValueType, class HashFunctionType = DefaultHashFunctions, class TypeOfCriticalSectionToUse = DummyCriticalSection>
void juce::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 getLock(), getNumSlots(), juce::Array< ElementType, TypeOfCriticalSectionToUse, minimumAllocatedSize >::getUnchecked(), juce::Array< ElementType, TypeOfCriticalSectionToUse, minimumAllocatedSize >::insertMultiple(), and juce::Array< ElementType, TypeOfCriticalSectionToUse, minimumAllocatedSize >::set().

Referenced by getReference().

◆ getNumSlots()

template<typename KeyType, typename ValueType, class HashFunctionType = DefaultHashFunctions, class TypeOfCriticalSectionToUse = DummyCriticalSection>
int juce::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()

Referenced by containsValue(), getReference(), remapTable(), remove(), and removeValue().

◆ swapWith()

template<typename KeyType, typename ValueType, class HashFunctionType = DefaultHashFunctions, class TypeOfCriticalSectionToUse = DummyCriticalSection>
template<class OtherHashMapType>
void juce::HashMap< KeyType, ValueType, HashFunctionType, TypeOfCriticalSectionToUse >::swapWith ( OtherHashMapType & otherHashMap)
noexcept

Efficiently swaps the contents of two hash-maps.

References getLock().

◆ getLock()

template<typename KeyType, typename ValueType, class HashFunctionType = DefaultHashFunctions, class TypeOfCriticalSectionToUse = DummyCriticalSection>
const TypeOfCriticalSectionToUse & juce::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 clear(), contains(), containsValue(), getReference(), operator[](), remapTable(), remove(), removeValue(), and swapWith().

◆ begin()

template<typename KeyType, typename ValueType, class HashFunctionType = DefaultHashFunctions, class TypeOfCriticalSectionToUse = DummyCriticalSection>
Iterator juce::HashMap< KeyType, ValueType, HashFunctionType, TypeOfCriticalSectionToUse >::begin ( ) const
noexcept

Returns a start iterator for the values in this tree.

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

◆ end()

template<typename KeyType, typename ValueType, class HashFunctionType = DefaultHashFunctions, class TypeOfCriticalSectionToUse = DummyCriticalSection>
Iterator juce::HashMap< KeyType, ValueType, HashFunctionType, TypeOfCriticalSectionToUse >::end ( ) const
noexcept
linkedin facebook pinterest youtube rss twitter instagram facebook-blank rss-blank linkedin-blank pinterest youtube twitter instagram