使用unordered_map从两个大文本文件中删除重复项
||
我是许多C ++库的新手,所以如果我的问题太幼稚,请原谅我。
我有两个大的文本文件,每个大约160 MB(每个大约700000行)。我需要从file2中删除出现在file1中的所有重复行。为此,我决定使用带有32个字符串的unordered_map作为键。 32个字符串是每行的前32个字符(足以唯一标识该行)。
无论如何,所以我基本上只是浏览第一个文件,并将每行的32个字符的子字符串推入unordered_map中。然后,我浏览第二个文件并检查file2中的行是否存在于我的unordered_map中。如果不存在,则将整行写入新的文本文件。
这适用于较小的文件(每个40 MB),但是对于160 MB的文件..插入哈希表需要很长时间(甚至在我开始查看file2之前)。在大约260,000个刀片处..它似乎已停止或运行非常缓慢。我是否有可能达到记忆极限?如果是这样,有人可以解释如何计算吗?如果没有,我还有其他方法可以使它更快吗?也许选择一个自定义的哈希函数,或者指定一些有助于优化它的参数?
我在哈希表中的关键对象对是(string,int),其中字符串始终为32个字符,而int是我用来处理重复项的计数。
我正在运行带12 GB RAM的64位Windows 7操作系统。
任何帮助将不胜感激..谢谢大家!
没有找到相关结果
已邀请:
2 个回复
羔磺
你换
将两个文件变成1个大文件:
使用
提取唯一行:
最好使用操作系统实用程序,而不是(重新)编写自己的实用程序。