如何使 QList<Type*> 与 indexOf() 和自定义运算符==()一起使用?
How to make QList<Type*> work with indexOf() and custom operator==()?
给定以下代码:
QList<Vertex*> _vertices; //this gets filled
//at some other point i want to check if there's already
//a vertex with the same payload inside the list
Vertex* v = new Vertex(payload);
int result = _vertices.indexOf(v);
if (result == -1){
//add the vertex to the list
} else {
//discard v and return pointer to match
}
//overloaded Vertex::operator==
bool Vertex::operator==(Vertex* other){
//i return true if my payload and the others
//payload are the same
}
据我所知,indexOf() 永远不会最终调用我的运算符==。我认为这是因为 QList 封装了指针类型和 indexOf() 比较指针。有没有办法将 ponters 保留在 QList 中并仍然使用我自己的运算符==()?
喜欢Vertex*::operator==(Vertex* other)
相关问题:在指针类型中删除 Qlist | 由于指针类型而不起作用
编辑:意图。
两个顶点被认为是相等的,其有效载荷携带的标识符是相等的。
Vertex
是Graph
类的一部分。我希望该类的客户端能够调用Graph::addEdge(Payload,Payload)
来填充图形。然后,图形对象负责在顶点对象中包装有效负载并构建边。因此,Graph 需要检查封装给定有效负载的顶点是否还不存在。在编写代码时,使用 QList 似乎是"可能工作的最简单的事情"。
有没有办法将 ponters 保留在 QList 中并仍然使用我自己的 运算符==()?
不,您需要 QList 首先取消引用指针,但它没有。 您必须对QList进行子类才能做到这一点。 但是,由于indexOf()
只是使用operator==()
进行迭代和比较,因此没有什么可以阻止您手动执行相同的操作。
但是,所有这些看起来都像是代码气味。 尝试在无序/非哈希容器中查找某些内容是线性时间 - 与QMap/QHash相比非常慢。 请编辑您的问题,描述您为什么要这样做,以及Vertex
包含哪些数据,我们将看看社区是否可以采用更好的执行机制。
相关文章:
- 将 exprtk 与自定义类的对象一起使用
- 如何将自定义记录器与websocketpp一起使用?
- 如何将来自 Boost.Python 的map_indexing_suite与自定义而不是标准对象一起使用?
- 是否可以将 std::basic_ifstream 和 std::basic_ofstream 与自定义缓冲区一起使用?
- gtest 期望无序元素与自定义比较器/匹配器一起使用
- 如何将unordered_set与自定义结构一起使用?
- 如何在 C++11 中将 std::max 与自定义比较器一起使用?
- 如何将 std::num_put 与自定义迭代器一起使用?
- 将 OpenGL VBO 与自定义类/数据结构一起使用
- 与自定义命名空间一起使用时实现 std::error_category、名称解析问题
- 如何将重新绑定与自定义分配器和自定义列表一起使用
- 设置要与无序集合一起使用的自定义类 - 在集合中找不到元素
- 将 boost odeint 与 std::map 和自定义向量空间代数一起使用时,没有可行的重载'='
- shared_ptr自定义分配器与自定义删除器一起
- 创建自定义迭代器结构以与CSTDIO一起使用
- 将CloudViewer与自定义Pointt类型一起使用
- 将 std::make_unique 与自定义删除器一起使用
- 将 std::find 与自定义 Book 类一起使用
- 将运算符new和运算符delete与自定义内存池/分配器一起使用
- 将 at() 与自定义对象的向量一起使用时的分割错误