我有一个类指针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;)'
我在这里做错了什么?
答案 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);
}