类指针向量上的std :: sort()
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了类指针向量上的std :: sort()相关的知识,希望对你有一定的参考价值。
我有一个类指针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,<unresolved overloaded function type>)'
我在这做错了什么?
答案
为了使用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();
}
另一答案
你缺少的最重要的部分是比较函数的参数是const
。另一种是返回类型。如果在声明函数时省略了返回类型,编译器将假定它返回int
,在这种情况下这是不正确的。
当然,当你调用std::sort
函数时,比较函数必须在范围内。
另一答案
您可以使用成员函数。但是您需要将其定义为静态成员函数并从类中调用它,而不是类的实例。
在函数声明之前注意static
,在sort中的函数名之前注意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);
}
以上是关于类指针向量上的std :: sort()的主要内容,如果未能解决你的问题,请参考以下文章