假设我有一个结构
struct info
{
string firstname;
string lastname;
double kids;
double income;
double cars;
int index;
};
假设我在这个结构中有500个人,每个人都包含信息的名字,姓氏,孩子,收入和汽车。
我创建了一个名为index的int,以便我可以对从最高到最低收入最多的人进行排序。
你会用什么方法或者你如何找到收入最高的前5名,并给他们一个1,2,3,4,5等索引。这样我就可以告诉谁前5名如果我希望打印出他们的名字。
我正在寻找一种简单的方法,因为我仍在学习树木等。
谢谢!
答案 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
字段的非常好的方法。为了能够很好地工作,你需要将索引与你正在排序的数据分开,并且你要对索引进行间接排序(也就是说,你要根据项目的收入对索引进行排序。索引)。