使用c ++中对象中的函数的结果对对象数组进行排序

Posted

技术标签:

【中文标题】使用c ++中对象中的函数的结果对对象数组进行排序【英文标题】:Sorting an array of objects using the result of a function in the object in c++ 【发布时间】:2017-01-25 19:21:49 【问题描述】:

我有一个程序可以创建一个指向对象的指针数组。指针指向的类存储一个项目的净价,并具有计算该对象的总价的函数。

Product *p[10];

Book *b;
Software *s;

double price;

cout << "Enter the price of the book: " << endl;
cin >> price;

b = new Book(price);

cout << "Enter the price of the software: " << endl;
cin >> price;

s = new Software(price);

cout << "Gross price of book: " << b->getGrossPrice() << endl;
cout << "Gross price of software: " << s->getGrossPrice() << endl;

p[0] = b;
p[1] = s;

有没有办法按照毛价升序对数组进行排序?

我知道 STL 中有一种排序算法,但我认为它对我不起作用,或者至少我不确定如何使它起作用。

网站上有类似问题的解决方案使用排序,但我找不到任何显示它在这种情况下使用。

【问题讨论】:

getGrossPrice() 是虚拟的吗?那么你可以用一个自定义函子调用 sort 来调用它 <algorithm> vector sort with objects?的可能重复 【参考方案1】:
std::sort(p, p+n,
          [](Product* p1, Product* p2)
          
              return p1->getGrossPrice() < p2->getGrossPrise();
          ); 

这是对标准排序函数std::sort 的调用。我们将开始和结束迭代器(在这种情况下为指针)传递给我们要排序的范围,第三个参数是一个返回 true 的函数对象,它的第一个参数严格小于(根据我们想要的 strict weak ordering排序依据)而不是第二个参数,否则为假。以 [] 开头的部分称为lambda-expression:在其他语言中,类似的对象可以称为匿名函数。它是在 C++11 中引入的。

【讨论】:

阿门,请不要只发布代码。这对提问者理解答案没有帮助。如果可以,请编辑答案并添加简短说明。 可能想要添加 C++11 > 并且可能会为 pre 添加一个解决方案。 各位耐心一点。 @ArmenTsirunyan 关于您的耐心请求:可以合理地假设,一旦有人发布答案,这就是他们打算发布的完整答案。人们有权立即批评答案。 @FrançoisAndrieux 另一方面,SO 系统鼓励 First 发帖,所以 Armens 程序是一个常见的程序。 Jon Skeet 也鼓励这样做。【参考方案2】:

使用range-v3,您可以简单地做(使用投影):

ranges::sort(prods, std::less<>, &Product::getGrossPrice);

Demo

【讨论】:

以上是关于使用c ++中对象中的函数的结果对对象数组进行排序的主要内容,如果未能解决你的问题,请参考以下文章

按最近的时间戳对数组中的对象数组进行排序,然后使用 jq 按每个数组的第一个对象的时间戳对外部数组进行排序

使用字典中的键对对象数组进行排序

JS对象数组多条件排序

C++中有专门给对象数组排序的类方法吗,就像Java中的sort

JS中的数组排序函数sort()

Vue.js - 如何按特定属性对数组中的对象进行排序并使用“v-for”进行渲染