Ho bisogno di implementare un set di set nella mia applicazione. L'utilizzo di QSet con una classe personalizzata richiede la fornitura di una funzione qHash()
e una operator==
.Come scrivere qHash per un contenitore QSet <SomeClass*>?
Il codice è il seguente:
class Custom{
int x;
int y;
//some other irrelevant here
}
inline uint qHash(Custom* c){
return (qHash(c->x)^qHash(c->y));
}
bool operator==(Custom &c1, Custom &c2){
return ((c1.x==c2.x) && (c1.y == c2.y));
}
//now I can use: QSet<Custom*>
Come posso implementare qHash(QSet<Custom*>)
, per essere in grado di utilizzare QSet< QSet<SomeClass*> >
?
Edit:
domanda supplementare: Nella mia applicazione del "set di set" può contenere fino a 15000 set. Ogni sottoinsieme fino a 25 puntatori di classe personalizzati. Come garantire che qHash(QSet<Custom*>)
sarà abbastanza unico?
Sei sicuro circa la '' QSet? Non dovrebbe essere 'QSet '? Il tuo operatore == 'per' Custom' non sarà mai chiamato da 'QHash', poiché usa l'operatore di uguaglianza incorporato per i puntatori. –