在前5个结构中创建最高值的索引

时间:2015-11-14 04:24:17

标签: c++ sorting struct

假设我有一个结构

struct info
{
    string firstname;
    string lastname;
    double kids;
    double income;
    double cars;
    int index;
};

假设我在这个结构中有500个人,每个人都包含信息的名字,姓氏,孩子,收入和汽车。

我创建了一个名为index的int,以便我可以对从最高到最低收入最多的人进行排序。

你会用什么方法或者你如何找到收入最高的前5名,并给他们一个1,2,3,4,5等索引。这样我就可以告诉谁前5名如果我希望打印出他们的名字。

我正在寻找一种简单的方法,因为我仍在学习树木等。

谢谢!

2 个答案:

答案 0 :(得分:0)

结构的向量。提供在排序期间调用的比较专用函数。 专业比较功能应根据收入(降序)进行比较 排序向量中的前5个元素应该给出答案

答案 1 :(得分:0)

如果您只想要前5名(并且不需要它们),您可以使用std::nth_element来查找它们。这通常比排序更快。

如果您确实想要排在前5位,可以使用std::partial_sort来完成这项工作,如下所示:

std::partial_sort(x.begin(), x.begin() + 5, x.end(), 
                  [](auto a, auto b) { return b.income < a.income; });

请注意,我在比较它们时交换了两个参数,使其按降序排序而不是升序。

我没有看到使用您放入结构中的index字段的非常好的方法。为了能够很好地工作,你需要将索引与你正在排序的数据分开,并且你要对索引进行间接排序(也就是说,你要根据项目的收入对索引进行排序。索引)。