哈希表搜索功能在某些情况下不起作用

时间:2014-04-15 03:57:59

标签: c++

搜索功能将获取一个键值,这是一个常量字符串&它将查看哈希表以查看是否找到了键值项。

我的代码在这里有效,除了少数情况(例如当我传入" 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;
}

2 个答案:

答案 0 :(得分:1)

我看到你使用开放地址进行碰撞,我在这里看不到任何问题。您确定您的字符串“ZZO”已正确插入哈希表吗?我建议你做一个单元测试来检查一下。只需插入字符串并迭代哈希表即可查看它是否存在。

顺便说一下,我建议你使用Separate chaining来实现哈希表,因为它很容易实现,而且通常更有效(当然,这取决于你的哈希函数)。它可以进一步扩展为线程安全。

答案 1 :(得分:1)

即使没有看到你的插入功能代码 - 我建议你的'插入'功能是问题 - 它很可能不处理哈希冲突并简单地覆盖一些值/元素 - 你为什么不发布您的插入函数的代码也是?