类指针向量上的std :: sort()

时间:2013-05-03 20:24:12

标签: c++ sorting stl stl-algorithm

我有一个类指针std::vector<Square*> listSquares的向量。我想用类的一个属性作为键对它进行排序。这就是我正在做的事情

bool compById(Square* a, Square* b)
{
    return a->getId() < b->getId();
}

std::sort(listSquares.begin(), listSquares.end(), compById)

但是编译器说: 错误:没有匹配函数来调用'sort(std :: vector :: iterator,std :: vector :: iterator,&lt; unresolved overloaded function type&gt;)'

我在这里做错了什么?

3 个答案:

答案 0 :(得分:12)

为了将compById用作std::sort的参数,它不应该是成员函数。这是错误的

class Square
{
    bool compById(Square* a, Square* b)
    {
        return a->getId() < b->getId();
    }
    ...
};

这样更好,

class Square
{
    ...
};

bool compById(Square* a, Square* b)
{
    return a->getId() < b->getId();
}

答案 1 :(得分:3)

您缺少的最重要的部分是比较函数的参数是const。另一种是返回类型。如果在声明函数时省略了返回类型,编译器将假定它返回int,这在这种情况下是不正确的。

当然,当您调用std::sort函数时,比较函数必须在范围内。

答案 2 :(得分:1)

您可以使用会员功能。但是您需要将其定义为静态成员函数并从类中调用它,而不是类的实例。

在函数声明之前注意static,在排序函数名之前注意Square::

class Square
{
    /*...*/
public:
    static bool compById(const Square* a, const Square* b)
    {
        return a->getId() < b->getId();
    }
};

main()
{
    /*...*/
    std::sort(listSquares.begin(), listSquares.end(), Square::compById);
}