我有一个包含很长项目列表的文本文件。所以我想按字母顺序对它们进行排序,但我不想将所有文件加载到内存(RAM)中。
我尝试将文件的所有内容加载到数组中,并按照我正常的方式对它们进行排序。但系统抱怨没有太多记忆!!
谢谢, 穆罕默德
答案 0 :(得分:7)
您需要阅读external sorting。基本方法是使用某种分而治之的例程,如merge sort,您可以在其中读取和排序文件的一部分,然后读取和排序文件的另一部分等,当您到达时最后你将已排序的部分合并在一起。
答案 1 :(得分:4)
也许STXXL(超大型数据集的标准模板库)有帮助。
STXXL提供external sorting等。
答案 2 :(得分:0)
您不必将整个文件保存在内存中。如果这是一项您不必经常执行的任务,您可以编写一个非常慢的应用程序。像这样(伪):
vector<int> linesProcessed;
for (int i = 0; i < lineCount; i++)
{
if (linesProcessed contains i) continue;
string alphabeticalFirstLine;
int lineIndex;
foreach line in oldFile
{
if (line is before alphabeticalFirstLine)
{
alphabeticalFirstLine = line;
lineIndex = i;
}
}
write alphabeticalFirstLine to newFile;
vector.add(lineIndex);
}
clear vector;
delete oldFile;
rename newFile to oldFile;
答案 3 :(得分:0)
如果您使用的是类似unix的操作系统,则可以使用sort命令。它将关注内存消耗。 例如,“cat large_file | sort”就可以完成这项工作。
或者您可以从库中编写自己的/使用外部排序。告诉我们您使用的是哪种语言,也许有人会告诉您使用的确切库。