【问题标题】:Creating indexes of highest value in struct for top 5在结构中为前 5 个创建最高值的索引
【发布时间】:2016-02-15 18:19:37
【问题描述】:

假设我在下面有一个结构

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

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

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

你会用什么方法,或者你会如何找到收入最高的前 5 人,并给他们一个指数为 1、2、3、4、5 等。这样我就可以知道谁是前 5 名如果我想把他们的名字打印出来。

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

谢谢!

【问题讨论】:

    标签: c++ sorting struct


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      如果您只想要前 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 字段的好方法。为了很好地工作,您希望索引与您正在排序的数据分开,并且您将对索引进行间接排序(也就是说,您将根据该项目的收入对索引进行排序索引)。

      【讨论】:

        猜你喜欢
        • 2023-01-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-14
        相关资源
        最近更新 更多