搜索函数将接受一个键值,它是一个常量字符串&,它会在哈希表中查找是否找到了键值项。
我的代码在少数情况下有效(例如,当我将“ZZ0”传递给函数时)。
不确定是不是因为我使用的是 ==
而不是 strcmp
但我不明白为什么仅仅因为这个原因它就不能工作。有人可以解释一下我是否遗漏了什么吗?
void HT::search(const string& item)
{
int index=hash(item);
bool found=false;
for(unsigned int i=0;i<hsize;i++)
{
if(hTable[(index+i)%hsize].key==item)
{
found=true;
cout<<"item found";
break;
}
}
if(!found)
{
cout<<" : Item not found!"<<endl;
}
cout<<endl;
}
最佳答案
我看到您使用开放地址进行冲突,我在这里没有看到任何问题。您确定您的字符串“ZZO”已正确插入到哈希表中吗?我建议你做一个单元测试来检查。只需插入字符串并迭代哈希表,看看它是否存在。
顺便说一句,我建议你使用 Separate chaining实现哈希表是因为它易于实现并且通常效率更高(当然取决于您的哈希函数)。它可以进一步扩展为线程安全的。
关于c++ - 哈希表搜索功能不适用于某些情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23074403/