次のコードがあるとします。
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() が自分の operator== を呼び出すことは決してありません。これは、ポインター型をカプセル化する QList とポインターを比較する indexOf() が原因であると思います。ポンターを QList に保持し、独自の operator==() を使用する方法はありますか?
お気に入りVertex*::operator==(Vertex* other)
関連する質問:ポインター型 Qlists の削除| ポインタ型のため動作しない
編集:意図。
2 つの頂点は等しいと見なされます。それらのペイロードによって運ばれる識別子は等しいです。
Vertex
Graph
クラスの一部です。Graph::addEdge(Payload,Payload)
そのクラスのクライアントが呼び出してグラフを作成できるようにしたい。その後、Graph オブジェクトは、ペイロードを Vertex オブジェクトにラップし、Edge を構築します。したがって、Graph は、特定のペイロードをカプセル化する Vertex がまだ存在しないかどうかを確認する必要があります。QList を使用することは、コードを書いている時点では「動作する可能性のある最も簡単なこと」のように思えました。