我需要实现存储任何类型键的哈希表(或哈希映射)。所以我使用了void *key
和size_t key_size
。我需要为这些键写 hash_function(void * key,size_t key_size)。
散列函数需要计算数组中的索引。所以我首先需要计算这种对象的整数表示。如果这将是字符串,我可以获得字符串中每个字符的ascii数字并总结它们。但我可以是任何类型(任何指针),即指向struct的字符串指针的指针,我该如何计算这样的整数表示?
也许我可以将此void *
转换为char *
然后循环访问key_size字节?
static int hash_function(void *key, size_t key_size) {
unsigned int h = 0;
char *key_data = (char *) key;
for(int i=0; i < key_size; i++) {
h += key_data[i];
}
return (h * 1049) & HASHTAB_MASK; // HASHTAB_MASK = HASHTAB_SIZE - 1 used instead of modulo operation as such approach is faster
}
答案 0 :(得分:1)
这里通常的答案是让C: \ xampp \ htdocs \ parent_folder \ name_project> gem install uglifier
函数的调用者提供自己的哈希函数,如下所示:
insert
然后,您可以为要插入的每种类型实现哈希函数,并将其传递给void insert(struct hash_table* table, void* data, int (*hash_function)(void*)) {
int hash = hash_function(data);
// insert data...
}
函数:
insert