【发布时间】:2017-05-06 09:59:20
【问题描述】:
我正在尝试在 C 中创建一个通用哈希表。我已经阅读了一些不同的实现,并遇到了几种不同的方法。
首先是使用这样的宏:http://attractivechaos.awardspace.com/khash.h.html
第二个是使用带有 2 个 void 指针的结构,如下所示:
struct hashmap_entry
{
void *key;
void *value;
};
据我所知,这种方法并不好,因为这意味着映射中的每个条目至少需要 2 次分配:一个用于键,一个用于值,无论存储的数据类型如何。 (是吗???)
在不走宏观路线的情况下,我无法找到一种保持通用性的体面方法。有没有人有任何可以帮助我的提示或示例?
【问题讨论】:
-
宏是一种重复代码的机制。它们不是数据结构。不依赖某种动态内存分配,您不太可能实现通用哈希表。
-
此外,包含指针的数据结构与动态分配无关。
-
@JohnBollinger 你的第一点是有道理的。如果您查看我发布的链接,您就会明白我的意思。回复:指针...我的意思是,由于它包含指针,如果您尝试在没有动态分配的情况下将项目添加到地图中,那么如果您尝试在这些项目所在的函数之外使用该地图,那么它将是无效的,对吗?跨度>
-
嗯,这是可能的,但并非没有限制和很多技巧。
-
总的来说,我的观点是,您以两种不同的方法呈现的内容是不合适的。很有可能,您的示例基于指针的实现使用包含指针的数据结构,类似于您作为替代方案提供的那种。在这种情况下,您只是不直接操纵它。您甚至可能会发现宏执行动态内存管理。你在比较苹果和建筑。