我在我的第一学期学习,并作为我的补偿的一部分。科学作业我必须使用向量实现一个简单的哈希图,但我在理解这个概念时遇到了一些问题。
首先我必须实现一个哈希函数。为了避免冲突,我认为使用双重哈希会更好,如下所示:
do {
h = (k % m + j*(1+(k % (m-2)));
j++;
} while ( j % m != 0 );
其中 h 是要返回的哈希,k 是键,m 是 hash_map 的大小(和一个素数;它们都是 int 类型)。
这很容易,但是我需要能够在映射中插入或删除一对键和相应的值。
这两个函数的签名应该是bool,所以我必须返回true或flase,我猜当向量中的位置h没有元素时我应该返回true。(但我不知道为什么 remove 也应该是 bool )。
我的问题是当 insert 函数返回 false 时该怎么办(即,当位置 h 上已经保存了一个键值对时 - 我将其实现为一个名为 find 的函数)。我显然可以通过简单地增加 j 来将它移动到下一个空闲位置,但是我的哈希函数计算的哈希不会再告诉我们某个键保存在哪个位置,从而导致删除函数的错误行为。
网上有没有很好的例子,不使用预先定义的 STD 方法?(我的谷歌在过去几天表现得很奇怪,只用当地语言回复我无用的点击)