2017-04-18 174 views
1

我正在学习编写代码并找到有趣的任务,但我不知道从哪里开始解决它。所以我有一个标题和评论文件需要放在正确的标题下。所以输入的第一行包含一个数字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 

我现在不从哪里开始。我应该使用数组将数据保存在内存中,然后尝试以正确的模式对其进行排序?或者将文本文件加载到数据结构中更好一些;在这种情况下是一个链表?也许有人可以指导我在正确的方向如何完成这项任务。 (我不要求为我编码,只是引导我或给一些算法,这将不胜感激)。谢谢!

回答

1

我假设你知道如何用C++读取文件,如果没有,请看看它,例如在这个tutorial

对于排序部分,您可以使用STL container 来存储ID。我会推荐一个带有id作为键和字符串作为值的地图。

地图的优点是,它已经排序(升序)。

如果你使用另一个容器,你应该看看排序算法,如果你想了解它们是如何工作的。例如气泡排序,选择排序,快速排序或合并排序的主要。

但是,如果你想排序没有任何实现,看看this

这并不能为您的问题提供具体的答案,但它可以帮助您开始。

[更新] 我没有正确阅读,我还没有看到多行可能有相同的ID。地图不一定是最合适的容器。

+2

也许['std :: multimap'](http://en.cppreference.com/w/cpp/container/multimap)会有用。它允许每个键有多个值;使用等效键的值将以插入顺序存储。 –