在 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;
}
我有一个文本文件,我从中读取数据并搜索其中的名称以跟踪它。我想使用散列而不是数组来提高搜索速度,如果名称已经包含在散列中,我不想插入两次。
(我找到了一些关于散列的代码,但示例代码是针对数字而不是字符串或单词的。我应该如何处理?保留 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;
}