我正在尝试通过模板在 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
}
};
因此,我无法继续涉及通用 key 的实现。
在 Java 中,我可以轻松地将键转换为字符串,然后很乐意将键的哈希值实现为字符串。但是,在 C++ 中,我所知道的是有一个 RTTI 的概念,它可以动态地将一个对象转换为所需的对象。
如果此方法完全正确,如何实现该动态转换?
如果在这种情况下使用模板不是实现泛型的正确方法,那么请提出一些更好的方法。
最佳答案
您通常会使用 std::hash
为此,让类型实现者根据需要专门化该模板。
size_t key_hash = std::hash<T1>()(key);
您无法为给定的任何随机类型通用地实现哈希函数。如果两个对象相等,则它们的哈希码必须相同。您可以简单地通过哈希函数运行对象的原始内存,但这些类型可能会实现忽略某些对象数据(例如,同步对象)的 operator==
重载。在那种情况下,您可能(并且很容易)为相同的对象返回不同的哈希值。
关于c++ - 如何在 C++ 中实现通用哈希函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16243711/