【发布时间】:2019-07-16 15:06:07
【问题描述】:
每个学生在不同科目上都获得了分数(满分 10 分)。以下是包含学生姓名、学科、分数的示例 csv 文件。
我们如何使用适当的数据结构编写一个高效的程序来解析这个文件,处理它并生成输出?我们的输出应该打印出谁的分数最低(和主题)。
john, maths, 8
roy, science, 6
john, science, 5
sara, arts, 7
neil, maths, 4
tony, arts, 6
bob, science, 7
tony, maths, 7
neil, science, 8
john, arts, 4
sara, history, 3
我们的输出应该打印出在任何科目中得分最低的人(与该科目中的所有其他人相比)。所以我们的输出应该是:
neil
john
由于 neil 的数学成绩比其他人最低,john 的科学和艺术成绩比其他人最低。 (但是,sara 不会出现在输出中,因为 sara 在该学科的历史分数没有低于其他任何人)
我做了什么?
我尝试以这种方式使用两个地图:<subject, <name, marks>>
即
std::unordered_map<std::string, std::unordered_map<std::string, int>> name_subject_marks;
在这里,我会为每个主题添加<name, marks>。如果主题已经存在,我只会在现有分数更高时替换关联的<name, marks>。因此,最后我会得到该科目最低分的名字。
但是,sara 也出现在此列表中。我该如何处理?如果有更好的方法,请告诉我。
【问题讨论】:
-
好吧,只要排除其中只有 1 个项目的任何主题。
-
你需要使用C++11吗?使用 C++14 transparent comparator 会更容易
-
不应该是
neil john john吗? -
-
反对票可能是因为您描述了代码而不是包含它。只发布你所拥有的