c++ - 哈希表搜索功能不适用于某些情况

标签 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;
}

最佳答案

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

顺便说一句,我建议你使用 Separate chaining实现哈希表是因为它易于实现并且通常效率更高(当然取决于您的哈希函数)。它可以进一步扩展为线程安全的。

关于c++ - 哈希表搜索功能不适用于某些情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23074403/

相关文章:

c++ - 使用 MinGW 编译的 DLL 无法在使用 Visual Studio 编译器编译的 C++ 代码中运行

c++ - 成员对象、引用和 shared_ptr

c++ - GetWindowRect 坐标不是屏幕相关的

c++ - 搜索遍历多个列表的项目

c++ - 在 Qt5 的 QQuickItem 上捕捉 mouseMoveEvent

c++ - 我是否通过将 Microsoft::WRL::ComPtr 作为引用 (&) 传递来完全否定它的好处?

c++ - C++ catch 语句中的初始化声明器

c++ - boost::function 运行时性能

c++ - 为什么 printf(inputString) 是一个安全漏洞?

c++ - 在 C++ pthread 中退出线程之前调用 mysql_thread_end 函数