我正在尝试使用以下方法对向量进行排序:
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);
}
我尝试了几种不同的方法,但是运气不佳。
答案 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));