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==忽略某些对象数据(例如,同步对象)的重载.在这种情况下,您可以(并且非常容易地)为相同的对象返回不同的哈希值.