使用C++删除文本文件中重复行的内存有效方法

cod*_*ose 13 c++ io file-io file

使用C++删除大型文本文件中重复行的最有效内存方法是什么?

让我澄清一点,我不是要求代码,只是最好的方法.重复的行不保证是相邻的.我意识到针对最小内存使用而优化的方法会导致速度变慢,但这是我的限制,因为文件太大了.

use*_*976 6

我会散列每一行,然后寻找具有非唯一散列的行并单独比较它们(或以缓冲方式).这对于重复发生率相对较低的文件很有效.

当您使用散列时,您可以将使用的内存设置为恒定量(即,您可以使用仅有256个插槽或更大的小型散列表.在任何情况下,mem的数量都可以限制为任何常量. )表中的值是具有该散列的行的偏移​​量.所以你只需要line_count*sizeof(int)加上一个常量来维护哈希表.

更简单(但更慢)是扫描每行的整个文件.但我更喜欢第一种选择.这是最有效的内存选项.你只需要存储2个偏移和2个字节来进行比较.