1

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

4

3 回答 3

1

您应该将第二个文件读入std::map<std::string,int>. 映射键将是行,值是在第二个文件中遇到行的次数。

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

于 2013-10-14T10:38:35.183 回答
0

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

于 2013-10-14T10:38:17.537 回答
0

您有一个内部循环,它将主文件的当前行与辅助文件中的行进行比较。如果您获取一些堆栈样本,您可能大部分时间都会在该内部循环中的某个地方找到它。

您可能会考虑这种技术,您可以将辅助文件预处理成一个特殊用途的过程,然后编译并与您的主程序链接。所花费的时间将是读取辅助文件的时间,然后大约一两秒的时间来编写专用程序,然后编译和链接整个东西。

那么你的主程序的运行应该是读取主文件的 I/O 绑定,因为内部循环会快得多。

于 2013-10-14T13:08:12.817 回答