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

标签 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

}
};

因此,我无法继续涉及通用 key 的实现。

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

如果此方法完全正确,如何实现该动态转换?

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

最佳答案

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

size_t key_hash = std::hash<T1>()(key);

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

关于c++ - 如何在 C++ 中实现通用哈希函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16243711/

相关文章:

c++ - 为什么我的 OpenSSL C++ 代码会创建二进制加密输出?

c++ - 在 switch 语句中使用 continue

c++ - 将文件中的数字读入数组

java - 如何在 Java 中比较字符串?

c++ - 将模板类型名添加到两个模板类

arrays - 在 Struts 2 中将字符串数组作为静态参数传递

python - 找到最少的删除次数以获得每个字母的唯一计数

algorithm - 是否有可能在恒定时间内找到 Set 中的随机元素?

c++ - 判断一个数是否具有 P^Q 形式?

performance - 电子商务:计算折扣的算法