我自己实现了 HashMap
/HashTable
(我知道它们是不同的,但这与这个问题无关)。
在这个实现中,我希望它非常灵活。我希望能够将整数、结构、字符、字符串等全部存储为键或值,而不必更改算法的代码。例如,在 Java 中我可以这样做:
HashMap<Integer, MyPersonalClass>
它会起作用的。在 C 中,我知道除了 void*
之外没有直接等价的东西。 。问题是,如果我有:
/* Node structure. */
struct hm_Node
{
void *key, *value;
struct hm_Node *next;
};
作为组成我的 HashMap/HashTable
的节点,然后我的hash()
方法需要以某种方式解析 key
正确。到目前为止,我只查找了 char*
的算法.
有没有类似的东西:
// This may not be valid code, just using it as an example
unsigned int hash(void *ptr)
{
switch(typeof(ptr)) // I know ptr is of type void*
{
case char*: ... break;
case char: ... break;
case int: ... break;
}
}
这到底是如何运作的?我只是想避免对 X、Y 和 Z 类型的 HashMap 使用完全不同的实现。谢谢。
最佳答案
看看qsort
的实现:它们让用户提供比较函数以便能够实现任意排序。
您可以采用同样的方式,让用户通过函数指针提供适当的哈希函数 - 如果需要,您可以为他们提供一些预构建的哈希函数,用于他们可以重复使用的标准类型。
关于C - 对 void 类型进行哈希处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39052477/