使用lambda表达式对对象的指针列表进行排序

时间:2015-06-03 16:59:42

标签: c++ list sorting lambda

我正在尝试按照他们参加比赛所需的时间对Pilot对象的指针进行排序。时间是通过Pilot类中的竞争方法计算的。所以我将通过方法而不是类属性对它们进行排序。 涉及问题的类:

class Pilot
{
    double compete(Race *race); // Computes the time the pilot takes to finish the race
}
class Race
{
    list<Pilot*> pilots; // Pilots competing

    void sortByTime();
}

我想使用lambda表达式对列表进行排序。这是我的尝试:

void Race::sortByTimes()
{ 
    sort(pilots.begin(), pilots.end(), [this](Pilot *p1, Pilot *p2) -> bool
    {
        return p1->compete(this) < p2->compete(this);
    });
}

我在算法库中遇到了5个编译错误:

Error C2784 'unknown.type std::operator - (std::move_iterator<_RanIt> &, const std::move_iterator<_RanIt2> &)' : could not deduce template argument for 'std::move_iterator<_RantIt> &' from 'std::_List_iterator<std::_List_val<std::_List_simple_types<PilotoOficial*>>>'

std :: reverse_iterator和std :: _ Revranit

中还有两个C2784错误
Error C2676 binary : 'std::_List_iterator<std::_List_val<std::_List_simple_types<Pilot*>>>' : does not define this operator or a conversion to a type acceptable to the predefined operator

Error C2780 'void std::_Sort(_RanIt,_RanIt,_Diff,_Pr' : expects 4 arguments; 3 provided

1 个答案:

答案 0 :(得分:3)

使用std::list::sortstd::sort需要随机访问迭代器,并且你已经给它了双向迭代器。另一种选择是使用像std::vector这样具有随机访问迭代器的容器。