How to use stdext :: hash_map?

I would like to see a simple example of how to correctly override stdext :: hash_compare to define a new hash function and comparison operator for my own custom type. I am using Visual C ++ (2008).

+7
hashmap visual-c ++
source share
3 answers

Here is how you can do it.

class MyClass_Hasher { const size_t bucket_size = 10; // mean bucket size that the container should try not to exceed const size_t min_buckets = (1 << 10); // minimum number of buckets, power of 2, >0 MyClass_Hasher() { // should be default-constructible } size_t operator()(const MyClass &key) { size_t hash_value; // do fancy stuff here with hash_value // to create the hash value. There no specific // requirement on the value. return hash_value; } bool operator()(const MyClass &left, const MyClass &right) { // this should implement a total ordering on MyClass, that is // it should return true if "left" precedes "right" in the ordering } }; 

Then you can just use

 stdext::hash_map my_map<MyClass, MyValue, MyClass_Hasher> 
+8
source share

Here you are, an example from MSDN

+1
source share

I prefer to use a non-member function.

The method given in the Boost documentation article The boost :: hash extension for a custom data type seems to work.

0
source share

All Articles