如何在C++中实现通用哈希函数

San*_*alp 4 c++ string algorithm hashtable

我试图通过模板在C++中实现HashTable.这是签名:

template<class T1, class T2>
class HashTable {

public:
void add(T1 a, T2 b);

void hashFunction(T1 key, T2 value)
{

// how to implement this function using key as a generic 
// we need to know the object type of key

}
};
Run Code Online (Sandbox Code Playgroud)

因此,我无法推进涉及通用密钥的实现.

在Java中,我可以轻松地将键转换为字符串,然后很高兴将键的哈希实现为字符串.但是,在C++中,我所知道的是有一个RTTI概念可以动态地将对象转换为所需的对象.

如果这个方法是正确的,如何实现动态转换?

如果在这种情况下使用模板不是实现泛型的正确方法,那么请建议一些更好的方法.

cdh*_*wie 10

您通常会使用std::hash此方法,并让类型实现者根据需要专门化该模板.

size_t key_hash = std::hash<T1>()(key);
Run Code Online (Sandbox Code Playgroud)

对于您给出的任何随机类型,您无法一般地实现哈希函数.如果两个对象相等,则它们的哈希码必须相同.您可以通过哈希函数简单地运行对象的原始内存,但类型可能会实现operator==忽略某些对象数据(例如,同步对象)的重载.在这种情况下,您可以(并且非常容易地)为相同的对象返回不同的哈希值.