搜索功能将获取一个键值,这是一个常量字符串&它将查看哈希表以查看是否找到了键值项。
我的代码在这里有效,除了少数情况(例如当我传入" 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;
}
答案 0 :(得分:1)
我看到你使用开放地址进行碰撞,我在这里看不到任何问题。您确定您的字符串“ZZO”已正确插入哈希表吗?我建议你做一个单元测试来检查一下。只需插入字符串并迭代哈希表即可查看它是否存在。
顺便说一下,我建议你使用Separate chaining来实现哈希表,因为它很容易实现,而且通常更有效(当然,这取决于你的哈希函数)。它可以进一步扩展为线程安全。答案 1 :(得分:1)
即使没有看到你的插入功能代码 - 我建议你的'插入'功能是问题 - 它很可能不处理哈希冲突并简单地覆盖一些值/元素 - 你为什么不发布您的插入函数的代码也是?