В настоящее время я работаю над небольшой программой, чтобы присоединиться к двум текстовым файлам (подобно объединению базы данных). Один файл может выглядеть следующим образом:C++ Чтение файла в Array/List/Vector
269ED3
86356D
818858
5C8ABB
531810
38066C
7485C5
948FD4
Второй похож:
hsdf87347
7485C5
rhdff
23487
948FD4
Оба файла имеют более 1.000.000 линий и не ограничивается определенным количеством символов. Мне бы хотелось найти все соответствующие строки в обоих файлах.
Я пробовал несколько вещей, Массивы, Векторы, Списки - но я в настоящее время борется с тем, чтобы решить, какой лучший (самый быстрый и простой в использовании).
Мой код в настоящее время выглядит следующим образом:
#include iostream>
#include fstream>
#include string>
#include ctime>
#include list>
#include algorithm>
#include iterator>
using namespace std;
int main()
{
string line;
clock_t startTime = clock();
list data;
//read first file
ifstream myfile ("test.txt");
if (myfile.is_open())
{
for(line; getline(myfile, line);/**/){
data.push_back(line);
}
myfile.close();
}
list data2;
//read second file
ifstream myfile2 ("test2.txt");
if (myfile2.is_open())
{
for(line; getline(myfile2, line);/**/){
data2.push_back(line);
}
myfile2.close();
}
else cout data2[k], k++
//if data[j] > a;
return 0;
}
мое мышление: С вектором произвольного доступа на элементах очень трудно и прыгает на следующий элемент не является оптимальным (не в коде, но я надеюсь, вы понимаете). Это также занимает много времени, чтобы прочитать файл в вектор, используя push_back и добавляя строки один за другим. С массивами случайный доступ проще, но чтение> 1.000.000 записей в массиве будет очень интенсивным и потребует много времени. Списки могут быстрее читать файлы, а случайный доступ дорог.
В конечном итоге я буду искать не только точные соответствия, но и первые четыре символа каждой строки.
Не могли бы вы помочь мне решить, какой самый эффективный способ? Я пробовал массивы, векторы и списки, но до сих пор не удовлетворен скоростью. Есть ли другой способ найти совпадения, которые я не рассматривал? Я очень счастлив полностью изменить код, с нетерпением жду любого предложения!
Большое спасибо!
EDIT: выход должен отображать соответствующие значения/линии. В этом примере вывод должен выглядеть так:
7485C5
948FD4
Не могли бы вы уточнить требования или ограничения? Должны ли вы сообщать номера строк соответствующих строк или просто выводить соответствующие строки? –