我对很多这些 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 操作系统。
任何帮助将不胜感激..谢谢大家!