我正在尝试通过模板在 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
}
};
因此,我无法继续涉及通用密钥的实施。
在 Java 中,我可以轻松地将密钥转换为字符串,然后很高兴将密钥的哈希值实现为字符串。但是,在C++中,我知道有一个RTTI的概念,它可以动态地将对象转换为所需的对象。
如果这个方法完全正确,如何实现动态转换?
如果使用模板不是在这种情况下实现泛型的正确方法,那么请建议一些更好的方法。
您通常会使用std::hash http://en.cppreference.com/w/cpp/utility/hash为此,让类型实现者根据需要专门化该模板。
size_t key_hash = std::hash<T1>()(key);
对于给定的任何随机类型,您无法通用地实现哈希函数。如果两个对象相等,则它们的哈希码必须相同。您可以简单地通过哈希函数运行对象的原始内存,但这些类型可能会实现operator==
忽略某些对象数据(例如同步对象)的重载。在这种情况下,您可能(并且非常容易)为相同的对象返回不同的哈希值。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)