Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 删除为应在哈希表中的记录返回false的函数_C++_Hashmap_Logic_Hashtable - Fatal编程技术网

C++ 删除为应在哈希表中的记录返回false的函数

C++ 删除为应在哈希表中的记录返回false的函数,c++,hashmap,logic,hashtable,C++,Hashmap,Logic,Hashtable,我正在制作一个哈希表,它使用线性探测作为冲突解决方法。我已经测试了我的其他功能,它们正在按预期工作,我只是不知道在删除中出现了什么问题。我正在尝试使用延迟删除策略,即在记录中将bool标志标记为已删除或未删除。我假设我遗漏了某个逻辑步骤,因为当传递给函数时,显然找不到应该删除的键 我发现remove有几个问题 主要原因是循环中的idx计算错误。应该是 int idx = (hash + i) % LargerMax; 就像您在更新中所做的那样 您没有正确处理已删除的记录。如果插入两条具有sma

我正在制作一个哈希表,它使用线性探测作为冲突解决方法。我已经测试了我的其他功能,它们正在按预期工作,我只是不知道在删除中出现了什么问题。我正在尝试使用延迟删除策略,即在记录中将bool标志标记为已删除或未删除。我假设我遗漏了某个逻辑步骤,因为当传递给函数时,显然找不到应该删除的键

我发现
remove
有几个问题

主要原因是循环中的
idx
计算错误。应该是

int idx = (hash + i) % LargerMax;
就像您在
更新中所做的那样

您没有正确处理已删除的记录。如果插入两条具有smae哈希值的记录(A,然后是B),然后删除记录A,那么请考虑列表的外观。如何找到B?(在继续阅读之前,请仔细考虑这一点。)

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


如果您搜索了所有节点但没有找到它,您还需要在函数末尾返回false。

谢谢,我会接受您的建议,现在就尝试一下。(A,然后B)有smae散列值的任何伪代码,然后删除记录A。如何找到B?(在阅读之前仔细考虑一下。在理解逻辑上有困难implementation@user7795742回答:你找不到B,因为当搜索到已删除的A记录时,你的搜索就会停止。好的,删除操作似乎正在运行……但是现在当我使用我的find()时,它在搜索已删除的单词时崩溃:D问题是什么?