如何使用stdext :: hash_map?

时间:2009-05-16 06:32:57

标签: visual-c++ hashmap

我想看一个如何正确覆盖stdext :: hash_compare的简单示例,以便为我自己的用户定义类型定义新的哈希函数和比较运算符。我正在使用Visual C ++(2008)。

3 个答案:

答案 0 :(得分:8)

这就是你如何做到的

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's 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
     }
 };

然后,你可以使用

stdext::hash_map my_map<MyClass, MyValue, MyClass_Hasher>

答案 1 :(得分:1)

在这里,例如MSDN

答案 2 :(得分:0)

我更喜欢使用非会员功能。

Boost文档文章Extending boost::hash for a custom data type中解释的方法似乎有效。