C++从文件中读取并输出排序的内容
问题描述:
我正在学习编写代码并找到有趣的任务,但我不知道从哪里开始解决它。所以我有一个标题和评论文件需要放在正确的标题下。所以输入的第一行包含一个数字N,它决定了标题的数量。每行以唯一的文章ID(整数)开头,后面跟着引号中的标题。没有更多的标题后,给出评论。开始时有标题ID和评论(一个词),但是对于相同的ID可能会重复评论。所以这里是一个文件的结构:C++从文件中读取并输出排序的内容
<N>
<ID1> "<Title1>"
...
<IDN> "<TitleN>"
<ID1> <Comment1>
...
<IDK> <CommentK>
现在在输出文件中,每个标题都有两行 - 第一个是标题,第二个是注释。标题必须按升序排列。和评论应该是相反的顺序(在开始最新评论)的输出文件的结构:
<Title1>
<Comment11> ... < CommentK1>
...
<TitleN>
<Comment1N> ... < CommentLN>
例子:
input:
3
1 "This is some title"
3 "Another title"
2 "And one more"
1 COmment
1 Another
3 Great
2 Awesome
3 Lucky
2 Stanley
output
This is some title
Another COmment
And one more
Stanley Awesome
Another Title
Lucky Great
我现在不从哪里开始。我应该使用数组将数据保存在内存中,然后尝试以正确的模式对其进行排序?或者将文本文件加载到数据结构中更好一些;在这种情况下是一个链表?也许有人可以指导我在正确的方向如何完成这项任务。 (我不要求为我编码,只是引导我或给一些算法,这将不胜感激)。谢谢!
答
我假设你知道如何用C++读取文件,如果没有,请看看它,例如在这个tutorial。
对于排序部分,您可以使用STL container 来存储ID。我会推荐一个带有id作为键和字符串作为值的地图。
地图的优点是,它已经排序(升序)。
如果你使用另一个容器,你应该看看排序算法,如果你想了解它们是如何工作的。例如气泡排序,选择排序,快速排序或合并排序的主要。
但是,如果你想排序没有任何实现,看看this。
这并不能为您的问题提供具体的答案,但它可以帮助您开始。
[更新] 我没有正确阅读,我还没有看到多行可能有相同的ID。地图不一定是最合适的容器。
也许['std :: multimap'](http://en.cppreference.com/w/cpp/container/multimap)会有用。它允许每个键有多个值;使用等效键的值将以插入顺序存储。 –