其他分享
首页 > 其他分享> > C搜索效果

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