将STD ::指针列表与比较器的对象列表
Sorting std::list of pointers to objects with comparator
我有一个类,该类上有针对对象的指针列表,而对象需要用比较器进行排序,而比较器是此类的成员:
class VoronoiDiagram
{
public:
void BuildVoronoi();
private:
list<shared_ptr<QPointF>> inputPoints
QPointF currentVoronoiPoint;
bool compairingPointsPredictate(shared_ptr<QPointF> a, shared_ptr<QPointF> b) { float d1 = (a->x()-currentVoronoiPoint.x())*(a->x()-currentVoronoiPoint.x()) + (a->y()-currentVoronoiPoint.y())*(a->y()-currentVoronoiPoint.y());
float d2 = (b->x()-currentVoronoiPoint.x())*(b->x()-currentVoronoiPoint.x()) + (b->y()-currentVoronoiPoint.y())*(b->y()-currentVoronoiPoint.y());
return d1 < d2; };
};
我在buildvoronoi()中打电话:
inputPoints.sort(compairingPointsPredictate);
但这给我两个错误:C3867带有我的比较器函数,c2660带有std :: list :: stort :: stort(请未收到1个参数)。
对不起我的英语或解释。我真的希望这里有人可以帮助我。谢谢。
sort
需要两个参数比较函数,但声明为成员函数会导致呼叫类似:
a.compairingPointsPredicate( b, c)
// ^
// no 't', it is predicate not predictate ;p
没有理由使compairpointsspredicate成为班级的成员。您可以使其成为一个免费的常见功能(如果需要访问私有数据,则QPointF的朋友)。
class QPointF{
friend bool compairingPointsPredicate(
shared_ptr<QPointF> a, shared_ptr<QPointF> b);
};
bool compairingPointsPredicate(shared_ptr<QPointF> a,
shared_ptr<QPointF> b) {
float d1 = (a->x()-currentVoronoiPoint.x())
*(a->x()-currentVoronoiPoint.x()) +
(a->y()-currentVoronoiPoint.y())
*(a->y()-currentVoronoiPoint.y());
float d2 = (b->x()-currentVoronoiPoint.x())
*(b->x()-currentVoronoiPoint.x()) +
(b->y()-currentVoronoiPoint.y())
*(b->y()-currentVoronoiPoint.y());
return d1 < d2;
}
用法:
inputPoints.sort(compairingPointsPredicate);
相关文章:
- C++ 创建包含链表和字符串的对象的链接列表时出错
- 我使用向量来创建类对象列表.初始化向量时如何使用参数调用构造函数?
- 从封装在对象中的函数 C++ 返回时为空的列表
- 如何在不销毁对象的情况下返回对象列表
- 如何使用Q_PROPERTY公开自定义对象列表
- 链接列表在 cpp 中包含不同的对象类
- 如何使用对象制作分数列表并获得平均值
- 什么更好?返回对象指针列表?或返回指向对象列表的指针?
- 如何将成员函数作为参数传递并在派生对象上执行方法列表
- 我可以从列表中获取对象并复制它们,但如何删除我复制的对象?
- 如何获取列表的每个对象并调用getName方法来打印其名称
- 如何在Windows Media Foundation SDK中指定语言列表对象
- 在 DLL 中嵌入 Python:Py_DECREF列表对象时访问冲突读取位置
- 将类的每个实例添加到列表对象的构造函数
- 列表<对象*>迭代器中的分段错误
- 如何使用list::sort()对STL列表对象进行排序,同时将自定义排序函数作为参数传递给list::排序
- 如何防止客户端修改列表对象
- c++列表对象错误
- 在列表对象中使用对象的派生函数
- 编译器错误 使用列表<对象*的迭代器> C++