【问题标题】:c++ read from a file and output sorted contentc++ 从文件中读取并输出排序后的内容
【发布时间】:2017-09-14 10:33:09
【问题描述】:

我正在学习编码并发现了有趣的任务,但我不知道从哪里开始解决它。所以我有一个包含一些标题和 cmets 的文件,需要放在正确的标题下。所以输入的第一行包含一个数字 N,它决定了标题的数量。每行以唯一的文章 ID(整数)开头,后跟引号中的标题。在没有更多头衔后,将给予 cmets。开头有 Title ID 和 comment(一个词),但 cmets 可能会针对相同的 ID 重复出现。所以这是一个文件的结构:

<N>                
<ID1>  "<Title1>"   
...                 
<IDN> "<TitleN>"
<ID1> <Comment1> 
...                
<IDK> <CommentK>

现在在输出文件中,每个标题都有两行 - 第一行用于标题,第二行用于 cmets。标题必须按升序排列。并且 cmets 应该是倒序的(最新的 cmets 在开头) 输出文件的结构:

<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++ file sorting input output


    【解决方案1】:

    我假设你知道如何在 C++ 中读取文件,如果不知道,请查看它,例如 tutorial

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

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

    如果您使用其他容器,如果您想了解排序算法的工作原理,则应该查看排序算法。例如冒泡排序、选择排序、快速排序或主要排序的合并排序。

    但是,如果您想在没有任何实现的情况下进行排序,请查看 this

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

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

    【讨论】:

    • 也许std::multimap 会有用。它允许每个键有多个值;具有等效键的值按插入顺序存储。
    猜你喜欢
    • 2013-03-23
    • 2011-02-15
    • 2015-03-10
    • 2017-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多