对文本文件进行排序

Posted

技术标签:

【中文标题】对文本文件进行排序【英文标题】:Sorting a text file 【发布时间】:2015-04-28 03:08:01 【问题描述】:

对包含数百万个字符串的文件进行排序的最有效方法是什么?

如果它是一个包含数百万整数的文件,我知道该怎么做。

如果是字符串,如何修改我们的方法? 还是有什么新方法?

【问题讨论】:

“我认为冒泡排序是错误的方法。” - Barrack Obama, 2008. 你在想什么字符编码? @cheers: 我们可以使用字符串的哈希值吗? @Guru:只是排序非常依赖于编码。没有这些信息以及有关预期执行平台的信息,就没有好的答案。 据我所知,我告诉过你像保持哈希值一样对其进行编码。如果任何其他编码有帮助,请建议 【参考方案1】:

先加载内存中的所有文件,然后使用std::sort

你可以这样做:

std::fstream MyFile("MyFile.txt",ios_base::in);
std::vector<std::string>MyStrings;
while(MyFile.eof()==0)
    std::stringstream MyBuffer;
    MyBuffer<<MyFile;
    MyStrings.push_back(MyBuffer.str())

std::sort(MyStrings.begin(),MyStrings.end()); //no need for compare function because it exsits for std::string

【讨论】:

请注意,由于 std::string 不支持 unicode 或其他任何内容,因此排序可能不是您想要的,因此您可能需要提供自己的比较功能 你可能不应该使用eof()循环:***.com/questions/5605125/… 我觉得这样用就好了。当我测试EOF 时,我没有读取该值。阅读后更新,所以我想我一定误解了那里的解释 一个问题是您在使用该值之前没有测试读取是否成功。另一个问题是我不明白您是如何阅读MyFile 的。 好吧,我假设MyFile 是一个文件流,因为这是您在 C++ 中使用的。我应该准确地说。

以上是关于对文本文件进行排序的主要内容,如果未能解决你的问题,请参考以下文章

按值对文本文件中的行进行排序

linux中如何对一个文本内容进行排序呢

linux中如何对一个文本内容进行排序呢

linux中如何对一个文本内容进行排序呢

在 Windows 中使用批处理脚本对文本文件进行排序

按行长对文本文件进行排序,包括空格