remove函数为应该在哈希表中的记录返回false

时间:2017-04-01 03:42:35

标签: c++ hashmap logic hashtable

我正在制作一个使用线性探测作为冲突解决方法的哈希表。我已经测试了我的其他功能,他们按预期工作,我似乎无法弄清楚删除中出了什么问题。我试图使用懒惰删除策略只是在记录中标记为已删除或未删除bool标志。我假设我错过了某个逻辑步骤,因为传递给函数时显然找不到应删除的键。

1 个答案:

答案 0 :(得分:0)

我发现remove有几个问题。

主要的一点是你的idx计算在你的循环中是错误的。它应该是

int idx = (hash + i) % LargerMax;

就像你在update中一样。

您没有正确处理已删除的记录。如果您插入两条具有smae哈希值的记录(A,然后是B),那么考虑一下您的列表是什么样的,然后删除记录A.您如何找到B? (在阅读之前考虑一下。)

当您走过records_时,当您找到已删除的节点时,您需要跳过它并转到下一个节点。只有在找到NULL记录时才停止搜索。

如果您通过所有节点搜索并且未找到它,则还需要在函数末尾return false