在 C++ 中散列单词?

Hashing words in C++?

我有一个文本文件,我从中读取数据并搜索其中的名称以跟踪它。我想使用散列而不是数组来提高搜索速度,如果名称已经包含在散列中,我不想插入两次。

(我找到了一些关于散列的代码,但示例代码是针对数字而不是字符串或单词的。我应该如何处理?保留 ASCII 中的第一个字母或将所有字母和 % 组合成一个数字?不确定具体如何去做。)

如果可能的话,您能提供一个简短的示例代码吗? 比方说;使用 Getline 获取文本文件中的每个单词,如果该单词尚未包含,则将其添加到 Hash Table。

方法无关紧要(链接、线性探测等)

请不要使用任何花哨的库。

您可以只使用 unordered_set

#include <string>
#include <unordered_set>
#include <fstream>

std::unordered_set<std::string> file_to_unordered_set(const std::string& filename) {
    std::unordered_set<std::string> tbl;
    std::ifstream fs(filename);
    if (!fs) {
        throw std::runtime_error("bad file");
    }

    std::string line;
    while (std::getline(fs, line)) {
        tbl.insert(line);
    }
    return tbl;
}

int main() {
    auto words = file_to_unordered_set("<some file path>");
    return 0;
}