在结构中为前 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 个创建最高值的索引的主要内容,如果未能解决你的问题,请参考以下文章