如何使QList <type *>与indexOf()和自定义运算符==()?</type *>一起使用

时间:2012-05-15 10:26:50

标签: c++ qt operator-overloading qlist

给出以下代码:

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()比较了指针。有没有办法在QList中保持ponters并仍然使用我自己的operator ==()?

Vertex*::operator==(Vertex* other)

相关问题:removing in pointer type Qlists | not working because of pointer type

修改:意图。

两个顶点被视为等于iff。其有效载荷所携带的标识符是相同的。

VertexGraph课程的一部分。我希望该类的客户能够调用Graph::addEdge(Payload,Payload)来填充图表。然后,图形对象负责在Vertex对象中包装Payloads并构建边缘。因此,Graph需要检查封装给定有效负载的顶点是否已经存在。在编写代码时,使用QList似乎是“可能最有用的东西”。

1 个答案:

答案 0 :(得分:3)

  

有没有一种方法可以保持QList中的ponters并仍然使用我自己的   运算符==()?

不,你需要QList首先取消引用指针,而不是。你必须继承QList才能做到这一点。但是当indexOf()只是迭代并使用operator==()进行比较时,没有什么能阻止你手动执行相同的操作。

但是,所有这些看起来都像代码味道。试图在无序/非散列容器中找到某些东西是线性时间 - 与QMap / QHash相比非常慢。请修改描述为什么要执行此操作的问题,以及Vertex包含的数据,我们将看看社区是否可以使用效果更好的机制。