HashMap Manual
maxon::HashMap is a generic class template for a map that maps keys to values with the help of hash values. It can use data types as a key that implement a "GetHashCode" and "IsEqual" function. maxon::HashMap is based on maxon::MapBase and maxon::Collection .
A new hash map object can simply be created using the class template:
// This example creates a hash map and inserts two elements. // The hash map stores maxon::String values using maxon::Int keys.The data stored in a maxon::HashMap can be cleared with:
An entry in a maxon::HashMap is represented as a maxon::HashMap::Entry object. New entries can be inserted with:
// insert data atoms. Insert (1, "Hydrogen" _s) iferr_return ;
// insert data maxon::Bool created = false ; auto e = &atoms. InsertEntry (2, created) iferr_return ; if (created && e) e->SetValue( "Helium" _s);
// insert data maxon::String & str = atoms. InsertKey (3, created) iferr_return ; str = "Lithium" _s;
// insert data auto lambda = []( maxon::HashMap<maxon::Int, maxon::String>::Entry & entry) -> maxon::Result<void> { entry.SetValue( "Beryllium" _s); return maxon::OK ; }; atoms. InsertLambda (4, lambda) iferr_return ;
// insert data (multi-map) e = &atoms. InsertMultiEntry (1) iferr_return ; if (e) e->SetValue( "Deuterium" _s);
An entry stored in the maxon::HashMap can be found using the proper key:
// find key "1" auto e = atoms. Find (1); if (e) DiagnosticOutput (e->GetValue());
// find key "2" const maxon::String * const str = atoms. FindValue (2); if (str) DiagnosticOutput (*str);
An entry of the maxon::HashMap can also be deleted:
Erase()
was used with specific parameters.
// find entry for key "1" maxon::HashMap<maxon::Int, maxon::String>::Entry * e = nullptr ; e = atoms. Find (1); if (e) { atoms. Erase (e, true ) iferr_return ; }
It is easily possible to iterate trough all stored key and values with:
另请参阅 Iterate .
// This example loops through all keys and value of the given hash map // and the multi-map values of a given key.// list all keys for ( const maxon::Int & key : atoms. GetKeys ()) DiagnosticOutput ( "Key: @" , key);
// list all values for ( const maxon::String & value : atoms. GetValues ()) DiagnosticOutput ( "Values: @" , value);
// list multi-map values of given key for ( const auto & it : atoms. FindAll (1)) { const auto value = it.GetValue(); DiagnosticOutput ( "Value: @" , value); }
A maxon::HashMap stores a certain number of elements and has a certain capacity to store further elements:
GetMemorySize()
.
It is easily to iterate over all entries in the maxon::HashMap :
// loop through all key/value pairs for ( const auto & e : atoms) { const maxon::Int & key = e. GetKey (); const maxon::String & value = e. GetValue (); DiagnosticOutput ( "Key: @, Value: @" , key, value); } auto e = atoms.Find(1); if (e) { auto it = atoms.GetIterator(e);
// next element ++it; const maxon::Int & key = it. GetKey (); const maxon::String & value = it.GetValue(); DiagnosticOutput ( "Key: @, Value: @" , key, value); }
A maxon::HashMap can easily be copied:
Further utility functions are: