2009-05-16 5 views
7

Me gustaría ver un ejemplo simple de cómo sobrescribir stdext :: hash_compare correctamente, para definir una nueva función hash y un operador de comparación para mi propio tipo definido por el usuario. Estoy usando Visual C++ (2008).Cómo usar stdext :: hash_map?

Respuesta

1

Aquí tiene, ejemplo de MSDN

+2

Ese ejemplo no sobrecarga la función hash. – batty

8

Ésta es la forma en que puede hacerlo

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

Entonces, sólo puede utilizar

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

Creo que el operador() s debe ser 'const' funciones o MSVC2005 generará error c3849 – avee