如何为指针的 QList 编写自定义比较器
How to write a custom comparator for a QList of pointers?
我有一个QList<MyPoint*> l
,其中MyPoint
是一个用户反抗类类型,我想这样做:
QList<MyPoint*> l;
MyPoint *a = new MyPoint(2, 4);
MyPoint *b = new MyPoint(4, 8);
MyPoint *c = new MyPoint(2, 4);
l << a << b;
然后:
l.contains(c); //true
我尝试重载==
运算符,如doc
所说:
此函数要求值类型具有 运算符==()。
尝试了不同的方法,但似乎都没有按预期工作。
这是我到目前为止尝试过的代码:
class MyPoint
{
public:
int x, y;
MyPoint(int x, int y)
: x(x),
y(y)
{
}
bool operator == (const MyPoint &other) const
{
return other.x == this->x && other.y == this->y;
}
bool operator == (const MyPoint *other) const
{
return true;
}
};
bool operator == (const MyPoint &a, const MyPoint &b)
{
return a.x == b.x && a.y == b.y;
}
我尝试了类似的东西:
bool operator == (const MyPoint *a, const MyPoint *b)
{
return a.x == b.x && a.y == b.y;
}
但我读到这是不可能的...我知道(*a == *c)
是正确的,但我希望它影响contains()
行为,以便使用我自己的比较器进行比较。
运算符
== 重载仅适用于MyPointer
对象的指针地址,而不适用于对象本身。
与其列出 MyPointer* 对象,不如尝试创建 MyPointer 对象列表(即 QList<MyPointer>
)。不过,您必须确保重载赋值运算符和复制构造函数。
如果这变得过于昂贵,请考虑将您的类转换为使用隐式共享,就像大多数Qt数据类一样,通过使用QSharedData
和QSharedDataPointer
类。
相关文章:
- std::设置自定义比较器
- 带自定义比较器的最小优先级队列
- 优先级队列自定义比较器
- 什么是自定义比较器以及如何在 C++ 的排序函数中使用它?
- 没有默认构造函数作为模板参数的自定义比较器
- 使用迭代器的自定义比较器函数
- Cython中带有自定义比较器的优先级队列
- gtest 期望无序元素与自定义比较器/匹配器一起使用
- 为什么在类或结构中传递自定义比较器函数?
- 在priority_queue中使用默认容器但自定义比较器
- 是否有任何统一的方法可以在 c++ 中创建自定义比较器?
- C++ priority_queue与自定义比较器并删除任何项目
- 如何在 C++11 中将 std::max 与自定义比较器一起使用?
- 通过函数指针对类内的 STL SET 使用自定义比较器
- 基于对象的两个属性的自定义比较器会引发异常
- 如何使用自定义比较器初始化类数据成员,该成员是 std::set
- 标准::set_intersection 带自定义比较器
- 使用自定义比较器C++映射,不插入所有元素
- 优先队列的自定义比较器
- C++ STL . 自定义比较器如何工作?