C搜索效果
作者:互联网
我有两个文本文件.其中包含大约70,000个名称(约1.5 MB)的列表.另一个包含将从其他来源获得的文本.也就是说,该文件的内容将在每次执行程序时更改(〜0.5MB).本质上,我希望能够将一些文本粘贴到文本文件中,并查看从列表中找到了哪些名称.类似于查找功能(CTR F),但具有70,000个关键字.
无论如何,到目前为止,我有:
int main()
{
ifstream namesfile("names.txt"); //names list
ifstream miscfile("misc.txt"); //misc text
vector<string> vecnames; //vector to hold names
vector<string> vecmisc; //vector to hold misc text
size_t found;
string s;
string t;
while (getline(namesfile,s))
veccomp.push_back(s);
while (getline(miscfile,t))
vectenk.push_back(t);
//outer loop iterates through names list
for (vector<string>::size_type i = 0; i != vecnames.size(); ++i) {
//inner loop iterates through the lines of the mist text file
for (vector<string>::size_type j = 0;j != vecmisc.size(); ++j) {
found=vecmisc[j].find(vecnames[i]);
if (found!=string::npos) {
cout << vecnames[i] << endl;
break;
}
}
}
cout << "SEARCH COMPLETE";
//to keep console application from exiting
getchar();
return 0;
}
现在,这对于提取我需要的数据非常有效,但是,它非常缓慢且效率很低,因为每个名称都要求我可能再次搜索整个文件,这会产生(75000 x杂项文本文件中的行数)迭代.如果有人可以提供帮助,我当然会很感激.一些示例代码是最受欢迎的.此外,如果有任何区别,我正在使用DevC.谢谢.
解决方法:
使用std::hash_set
.将所有关键字插入集合中,然后遍历大型文档,每次遇到一个单词时,请测试集合中是否包含该单词.
标签:c,performance,string,full-text-search 来源: https://codeday.me/bug/20191013/1906509.html