向量排序:如何让布尔函数接受第三个变量

时间:2018-06-21 15:23:14

标签: c++ sorting vector

我正在尝试使用以下方法对向量进行排序:

sort(vec1.begin(), vec1.end(),rankComboEnergy);

但是,我在布尔表达式中还有一个附加术语(FE_scale),我想根据命令行参数对其进行更改。

bool rankComboEnergy(Coordinates2 first, Coordinates2 second) {
    return (first.Energy + FE_scale*first.FEnergy < second.Energy + FE_scale*second.FEnergy);
}

我尝试了几种不同的方法,但是运气不佳。

2 个答案:

答案 0 :(得分:3)

使用lambda表达式! GCC 5.4支持带有-std=c++11标志的lambda。

float FE_scale = whatever;

sort(vec1.begin(), vec1.end(), [=](const Coordinates2 &first, const Coordinates2 &second)
{
    return (first.Energy + FE_scale*first.FEnergy < second.Energy + FE_scale*second.FEnergy);
});

答案 1 :(得分:2)

struct MySort
{
  double FE_Scale;
  MySort(double f) :FE_Scale(f) {}
  bool operator() (const Coordinates2 & first, const Coordinates2 & second)
  {
    return first.Energy + FE_Scale*first.FEnergy < second.Energy + FE_Scale*second.FEnergy;
  }
};

//...

std::sort(vec1.begin(), vec1.end(), MySort(10));