Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用C++;_C++_File_Diff - Fatal编程技术网

C++ 使用C++;

C++ 使用C++;,c++,file,diff,C++,File,Diff,我有两个大的文本文件,每个都有超过1000万行。如何比较文件,并使用C++ ++在文件中获取不同的行? 我尝试将一个文件加载到内存中,对内存进行排序,并使用二叉树逻辑来比较文件。它进行了比较,并在20秒内给出了结果。但是它消耗了更多的内存。(文本文件大约为500 MB) 我希望在不消耗更多内存的情况下比较两个文件,以获得良好的性能,并且对硬盘的影响最小。您可以使用两次传递的方法 第一遍,您读取文件,但只存储行的哈希值和行开始位置,然后您可以根据哈希值比较文件,当两行具有相同的哈希值时,您仅在第二

我有两个大的文本文件,每个都有超过1000万行。如何比较文件,并使用C++ ++在文件中获取不同的行? 我尝试将一个文件加载到内存中,对内存进行排序,并使用二叉树逻辑来比较文件。它进行了比较,并在20秒内给出了结果。但是它消耗了更多的内存。(文本文件大约为500 MB)


我希望在不消耗更多内存的情况下比较两个文件,以获得良好的性能,并且对硬盘的影响最小。

您可以使用两次传递的方法


第一遍,您读取文件,但只存储行的哈希值和行开始位置,然后您可以根据哈希值比较文件,当两行具有相同的哈希值时,您仅在第二遍中再次读取行以进行完全比较。这将节省内存消耗和cpu时间,同时读取某些行两次会有一点损失。

第一步是选择一种语言。对于C和C++,解决方案会有所不同。这让我想起了“质量、预算、时间-选择二”,你是说像一个差异?每次只读取每个文件的一行。否则这个问题就太模糊了。文件只是一组行,这意味着它们的顺序不重要吗?现在还不清楚“不同的行”到底是什么意思。你想知道这两个文件的不同之处(基本上是a
diff
)还是哪一行在一个文件中而不是在另一个文件中?我的建议是相同的,但后来我想,当散列相等时(几乎永远),获取文本可能是确保比较所必需的。因此,这种幼稚的策略可能不是很有效。OTH diff应该使用类似的东西。如果你不在乎在宇宙结束之前犯了一两次错误,只需在源代码行上使用128位哈希代码即可。对1000万行进行错误比较的概率为(1-2^(-128))*10^7~~1-2^(-103)。看起来很安全。@IraBaxter好吧,实际上我在乎;)我想很多人也很在乎。