【问题标题】:Sort vector by sum of a pair array elements [closed]按一对数组元素的总和对向量进行排序[关闭]
【发布时间】:2014-11-10 14:33:07
【问题描述】:

我只是在玩 C++ 排序和 lambda,想知道是否可以按总和对元素进行排序? 例如:

std::sort(my_vector.begin(), my_vector.end(), [&, sum](int a, int b){
return a + b == sum; });

我尝试了上面的方法,它给出了运行时错误:"Expression: Invalid operator <".

更新1

例子: 总和 = 4

1 ,2 ,5, 3, 2

我需要对元素进行分组,两者之和等于 Sum,例如 4

所以它必须像这样分组:

1,3,2,2,5

有人可以提出替代解决方案吗?我只是懒得使用愚蠢的迭代来实现它。

谢谢。

【问题讨论】:

  • 什么的总和?排序需要每对元素之间的< 函数,在您的情况下为ab。所以将ab 相加是没有意义的。你能展示一个未排序的示例列表以及你希望它排序的内容吗?
  • 我已经知道了,因此我正在寻求不使用迭代器的替代解决方案!
  • @ProblemSolver 我很高兴你知道了,因为我仍然没有。清楚地解释你想如何排序。给我一个两个元素的例子,哪个更大。
  • 这不是std::sort 的工作。它更接近std::partition,但仍然不是很正确(std::partition 适用于单个元素,而不是找到满足谓词的对)。我很确定您在这里无法编写自己的代码。
  • 但是预分组列表甚至不包含与后分组列表相同的元素。

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


【解决方案1】:

std::sort 需要一个比较元素的谓词。该谓词必须建立strict weak ordering,其中一个重要属性是如果pred(a, b) 返回true,pred(b, a) 必须返回false。您的 lambda 不满足此属性。

【讨论】:

  • sort 是严格-弱排序不是编译时要求......只是一个合乎逻辑的要求。我可以用[](int, int){return false} 对向量进行排序。那会很愚蠢,但我可以做到。
  • @Barry:嗯,你可以用它编译。运行时会发生什么是另一个问题。
  • @JerryCoffin 是的,我知道。这就是为什么我对"Expression: Invalid operator <" 的来源感到困惑。
  • @Barry 不清楚你的观点或论点是什么。
  • 好的,好像没有使用迭代器就无法实现这一点 -_- 无论如何感谢大家的帮助。
猜你喜欢
  • 1970-01-01
  • 2018-09-16
  • 2019-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-26
相关资源
最近更新 更多