【问题标题】:Sorting objects vector with lambda, not sorting in the end用 lambda 对对象向量进行排序,最后不排序
【发布时间】:2021-02-06 07:45:01
【问题描述】:

我正在尝试使用 lambda 为向量编写一个排序函数,我在很多地方都看到过这个建议,但我一直遇到问题。

std::sort(eventvec.begin(), eventvec.end(), [](const event& lhs, const event& rhs) {
    return lhs.getim < rhs.getim;});

我在编写它时遇到了多个错误,然后我将它堆叠在一个函数中的一个函数上,因为它需要一个静态函数。

类中声明的函数有:

double event::getut() { return unift; }

static double getim(event &a) { return a.getut(); }

最后排序根本不按顺序。属性中也有负值。有什么建议吗?

【问题讨论】:

  • 有哪些错误?我认为你应该使用return lhs.getim() &lt; rhs.getim(); 而不是你写的。
  • 您没有调用该函数。 return lhs.getut() &lt; rhs.getut() 但这意味着您需要将 getut() 设为常量。像这样:double event::getut() const { return unift; }
  • @TanveerBadar 会要求提供参数,我应该输入什么作为参数,因为 lhs.getim(lhs) 不起作用。
  • @RetiredNinja 错误:将 'const event' 作为 'this' 参数传递会丢弃限定符 [-fpermissive] AND --------- -------------------------------------------------- ---------------- 注意:在调用 'double event::getut()' double event::getut() ^~~~~
  • 你没有阅读我写的所有内容。 “这意味着你需要将 getut() 设为 const。像这样:double event::getut() const { return unift; }

标签: c++ sorting c++11 vector lambda


【解决方案1】:

您正在按照event::getim 的地址对您的活动进行排序,这对于每个活动都是相同的。

我认为你的意思是调用事件的成员函数,它需要可以从 const event 调用

double event::getut() const { return unift; }

std::sort(eventvec.begin(), eventvec.end(), [](const event& lhs, const event& rhs) {
return lhs.getut() < rhs.getut(); });

【讨论】:

  • @wakanada 您需要编辑event::getut,如图所示。它需要可从const event 调用
  • 是的,明白了。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多