C++列表排序功能

C++ List sort function

本文关键字:功能 排序 列表 C++      更新时间:2023-10-16

我不知道如何正确实现C++中列表的排序。我收到构建错误:

'Ranker::compare':函数调用缺少参数列表;使用 '&Ranker::compare' 创建指向成员的指针

如何正确实现列表的排序函数?

Ranker.h:

list<Competitor*> sorted;

排名.cpp:

bool Ranker::compare(Competitor* first, Competitor* second) {
    if (first->getTime() < second->getTime())
        return true;
    else
        return false;
}
int Ranker::addList(Competitor* starter) {
    sorted.push_back(starter);
    sorted.sort(compare);
}

只需使rankor成为一个简单的函子:

struct Compare
{
    bool operator()(Competitor* first, Competitor* second) const {
        return first->getTime() < second->getTime();
    }
};
// STUFF
sorted.sort(Compare());

或者如果您有 C++11

sorted.sort([](Competitor* first, Competitor* second) {
          return first->getTime() < second->getTime();
           });

Ranker::compare()是一个成员函数。成员函数绑定到实例。尝试使用静态方法或"免费"函数。

该函数实际上Ranker::compare()有三个参数: 除了两个Competitor对象之外,它还采用指向对象的隐式指针作为参数。但是,传递的二进制谓词 do std::list<...>::sort() 仅接受两个参数。

最简单的解决方法可能是使函数成为static成员。但是,这并不是说这可能不是最快的方法,因为函数指针很少可以内联。如果要减少函数调用开销,可能需要将逻辑封装到合适的函数对象中:

struct RankerCompare {
    bool operator()(Competitor const* first, Competitor const* second) const {
        return first->getTime() < second->getTime();
    }
};
...
sorted.sort(RankerCompare());

顺便说一句,布尔值不会通过从条件语句返回truefalse而变得更加布尔!直接返回布尔值是完全可以的!