4) Это круто.
я есть два текстовых файла. Один содержит список из примерно 70000 имен (~ 1,5 МБ). Другой содержит текст, который будет получен из разных источников. То есть содержимое этого файла будет меняться при каждом запуске программы (~ 0,5 МБ). По сути, я хочу иметь возможность вставить текст в текстовый файл и посмотреть, какие имена из моего списка найдены. Вроде как функция поиска (CTR + F), но с 70000 ключевых слов.
В любом случае, что я имею до сих пор:
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 # строк в текстовом файле misc) итерации. Если бы кто-то мог помочь, я был бы очень признателен. Некоторые примеры кода приветствуются. Кроме того, я использую Dev C ++, если это имеет какое-либо значение. Благодарю.