使用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操作系统。 任何帮助将不胜感激..谢谢大家!     
已邀请:
        您不需要地图,因为您没有任何关联数据。无序集合将完成此工作。另外,我会使用一些内存有效的哈希集实现,例如Google的sparse_hash_set。它具有很高的内存效率,并且能够将内容存储在磁盘上。 除此之外,您还可以处理较小的数据块。例如,将文件分成10个块,从每个文件中删除重复项,然后将它们合并,直到到达一个没有重复项的单个块。你明白了。     
        我不会编写C ++程序来执行此操作,而是使用一些现有实用程序。 在Linux,Unix和Cygwin中,执行以下操作:
cat
将两个文件变成1个大文件:
# cat file1 file2 > file3
使用
sort -u
提取唯一行:
# sort -u file3 > file4
最好使用操作系统实用程序,而不是(重新)编写自己的实用程序。     

要回复问题请先登录注册