gpt4 book ai didi

c++ - 将多个txt文件合并为一个

转载 作者:行者123 更新时间:2023-11-28 02:24:08 30 4
gpt4 key购买 nike

下午好。

我遇到了一些问题。我可以解决它,但我没有编程经验,我觉得这个问题有更漂亮和合理的解决方案。

问题如下。给定一组总大小超过一百兆字节的文本文件。从 2 到 N 的文件数。文件包含排序的唯一数字(例如,ID)。它想将所有数字合并到一个输出文件中。在生成的文件编号中也需要进行排序。

我将按如下方式解决这个问题:打开所有文件。取出每个文件的第一个数字。将它们放在一个容器中(例如,载体)。找到容器内的最小数字。将最小数字放入输出文件中。在他的位置,从文件中输入以下数字,从中取出最小数字。好像这个方法叫做“外部归并排序”。

请告诉我,有没有更聪明的方法来解决这个问题?

最佳答案

外部归并排序就是为解决这个问题而创建的。这种排序的复杂度是 N * log(number_of_files)

为了简化您的代码,您可以将文件流与优先级队列中的数字一起存储。

完全未经测试,但可能有用的代码:

std::vector<ifstream> file_streams(stream_count);  
// open streams.
using int_and_stream = std::pair<int, std::ifstream&>;
using cont = std::vector<int_and_stream>;
std::priority_queue<int_and_stream, cont, pair_comparer> queue;

for(auto& stream: file_streams){
int id;
stream >> id;
queue.push(std::make_pair(id, stream));
}

while(!queue.empty()){
auto smallest = queue.top();
outstream << smallest.first;
int id;
if(smallest.second >> id){ // file ended?
queue.push(std::make_pair(id, stream));
}
}

对于 pair_comparer,您可以查看 here

关于c++ - 将多个txt文件合并为一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31321084/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com