我目前正在研究一个加入两个文本文件(类似于数据库连接)的小程序。一个文件可能看起来像:C++将文件读入Array/List/Vector
269ED3
86356D
818858
5C8ABB
531810
38066C
7485C5
948FD4
第二个是类似的:
hsdf87347
7485C5
rhdff
23487
948FD4
两个文件都超过000000线,不限于字符的具体数量。我想要做的是在两个文件中找到所有匹配的行。
我已经尝试了一些东西,数组,矢量,列表 - 但我目前正在努力决定什么是最好的(最快和内存容易)的方式。
我的代码目前的样子:
#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记录到数组中会非常强烈,并且需要很长时间。列表可以更快地读取文件,随机访问又是昂贵的。
最终,我不仅会寻找完全匹配,而且还会查找每行的前4个字符。
你能帮我决定,最有效的方法是什么?我已经尝试过数组,向量和列表,但对目前的速度并不满意。有没有其他的方式来找到匹配,我没有考虑过?我很高兴完全更改代码,期待任何建议!
非常感谢!
编辑:输出应列出匹配的值/行。在这个例子中,输出应该看起来像:
7485C5
948FD4
您可以更具体地了解要求或限制吗?您是否必须报告匹配行的行号或只输出匹配行? – 2013-10-10 02:28:52