因此,从概念上讲,我在一个文件中读取了大约200万行数据。我希望稍后对数据进行排序、存储和应用其他功能。
发布于 2016-02-16 03:00:00
好的,我从你的帖子中得知你是用C++写这篇文章的。但是,除了排序要求之外,细节还有点稀疏。但你在整理什么?所有字段都解释为文本吗?是一些数字吗?有多把钥匙吗?
如果您不完全需要用C++编写它,并且您是在Linux上,那么只需调用/bin/sort来进行排序。这看上去像是一种“条条框框”,但像Talend这样的商业软件甚至求助于此。
但是,如果您必须用C++编写新代码,那么以下是我的建议:
1) CSV文件是否已转义?换句话说,嵌入式引号和分隔符是否需要特殊处理?你得先想清楚。
2)看看这个:http://mybyteofcode.blogspot.com/2010/02/parse-csv-file-with-boost-tokenizer-in.html
3)扫描输入的简单表示为vector<vector<string> >。但它很难处理。相反,在vector<string>周围包装一个类,生成指向这些类的指针向量,每一行输入一个,然后对它们进行排序。
4)现在你应该能够在内存中对2M“中等”行进行排序。只需使用std::排序。但是,为了全面的通用性,您需要考虑,如果它不适合内存呢?对此最常见的解决方法是一次对块进行排序,将结果写入磁盘,然后使用优先级队列或类似的结构进行合并。
https://stackoverflow.com/questions/35422804
复制相似问题