gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:02:23 24 4
gpt4 key购买 nike

我正在尝试通过模板在 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com