在C++中,如何在C中从头开始创建哈希图?

需要考虑哪些参数,以及如何测试hashmap?如中所示,在您可以说您的hashmap已经完成之前,您将运行哪些基准测试用例?

推荐答案

如果你知道它们背后的基本原理,应该不会太难.

通常,您会创建一个名为"bucket"的数组,其中包含键和值,并带有一个可选指针来创建一个链表.

当您使用一个键访问哈希表时,您将使用一个自定义哈希函数处理该键,该函数将返回一个整数.然后取结果的模,即数组索引或"bucket"的位置.然后将未保存的密钥与存储的密钥进行判断,如果匹配,则找到了正确的位置.

否则,您会遇到"冲突",必须在链接列表中爬行并比较关键点,直到匹配为止.(注意,有些实现使用二叉树而不是链表来进行冲突).

查看这个快速哈希表实现:

https://attractivechaos.wordpress.com/2009/09/29/khash-h/

C++相关问答推荐

如何在不修改字符串缓冲区早期使用的情况下覆盖字符串缓冲区

GCC引发不明确的诊断消息

核心转储文件中出现奇怪的大小变化

LONG_DOUBLE_T是否存在(标准C:C23)

二进制计算器与gmp

我在这里正确地解释了C操作顺序吗?

GCC创建应用于移动项的单独位掩码的目的是什么?

如何在C语言中正确打印图形

&;(str[i])和(&;str)[i]有什么区别?

每次除以或乘以整数都会得到0.0000

等同于铁 rust 的纯C语言S未实现!()宏

如何在C-函数中混合使用C代码和ASM?

如何使用FSeek和文件流指针在C中查找文件的前一个元素和前一个减go 一个元素

Valgrind正在使用一个Fexecve电话报告不可能发生的事情

如何使用空元素块声明指针数组

为什么会出现此错误?二进制表达式的操作数无效

无算术运算符和循环的二进制乘法

在C中使用字符串时是否不需要内存分配?

关于不同C编译器中的__attribute__支持

如何使crc32的结果与cksum匹配?