mct*_*nne 5 c hashtable hashmap
我试图在C中创建一个通用哈希表。我已经阅读了几种不同的实现,并遇到了几种不同的方法。
首先是使用像这样的宏:http : //attractivechaos.awardspace.com/khash.h.html
第二种是使用带有2个void指针的结构,如下所示:
struct hashmap_entry
{
void *key;
void *value;
};
Run Code Online (Sandbox Code Playgroud)
据我所知,这种方法并不是很好,因为它意味着映射中的每个条目都至少需要2种分配:一种分配给键,一种分配给值,而与存储的数据类型无关。(那正确吗???)
如果没有采用宏路由,就无法找到一种使它通用的不错的方法。有人有任何提示或示例可以帮助我吗?
C 没有通用数据类型,因此您想要做的事情(没有额外的分配和void*转换)实际上是不可能的。您可以使用宏来动态生成正确的数据函数/结构,但您也试图避免使用宏。
所以你需要放弃至少一个想法。
您可以通过分配以下内容来拥有通用数据结构,而无需额外分配:
size_t key_len;
size_t val_len;
char key[];
char val[];
Run Code Online (Sandbox Code Playgroud)
一口气然后分发 void 指针,或者为每种特定类型添加 api。
或者,如果您需要处理的类型数量有限,您也可以使用正确的类型标记该值,这样现在每个条目都包含:
size_t key_len;
size_t val_len;
int val_type;
char key[];
char val[];
Run Code Online (Sandbox Code Playgroud)
但在 API 中至少你可以验证请求的类型是否正确。
否则,为了使所有内容通用,您只能使用宏或更改语言。