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

Posted

技术标签:

【中文标题】在结构中为前 5 个创建最高值的索引【英文标题】:Creating indexes of highest value in struct for top 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 名如果我想把他们的名字打印出来。

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

谢谢!

【问题讨论】:

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

【讨论】:

以上是关于在结构中为前 5 个创建最高值的索引的主要内容,如果未能解决你的问题,请参考以下文章

4-5-创建索引表-串-第4章-《数据结构》课本源码-严蔚敏吴伟民版

如何在 Uniface 中为 json 结构创建一个列表

在C中为结构中的单个字符分配内存[重复]

在 Swift 中为 Firebase 数据结构创建类

ClickHouse存储结构及索引详解

结构平均分和最高分