在c ++中为非常大的输入搜索文件中的字符串的有效方法

时间:2013-10-14 10:33:02

标签: c++ performance string-search

我有一个拥有数百万行的主文件。然后在从文件中读取每一行时,我需要在另一个文件中找到该行,该行具有更少的行(仅数千个)来做出决定。目前我正在使用向量来读取开头的第二个文件,然后对于主文件中的每一行,我迭代向量以查找该行。问题是运行时间很长。是否有任何有效的方法来执行任务并将运行时间限制到一些合理的值。

3 个答案:

答案 0 :(得分:1)

您应该将第二个文件读入std::map<std::string,int>。 Map键为line,value为第二个文件中遇到的行数。

这样一来检查第一个文件中的给定行是否可以在第二个文件中找到的时间是不变的,并且运行的总时间应该仅受磁盘驱动器的速度限制以读取第一个巨大文件的内容。

答案 1 :(得分:0)

您可以尝试用std :: set替换第二个(较小的)向量。

答案 2 :(得分:0)

您有一个内部循环,它将主文件的当前行与辅助文件中的行进行比较。 如果你采取一些堆栈样本,你可能会在大多数时间内在内循环中找到它。

您可能会考虑this technique,将辅助文件预处理为专用程序,然后编译并链接到主程序。 所需的时间是读取辅助文件的时间,然后按一两秒的顺序编写专用程序,然后编译并链接整个文件。

然后主程序的运行应该是I / O绑定读取主文件,因为内部循环会更快。