【发布时间】:2012-02-25 22:36:45
【问题描述】:
我需要在我的应用程序中实现一组集合。
将 QSet 与自定义类一起使用需要提供 qHash() 函数和 operator==。
代码如下:
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*>
如何实现qHash(QSet<Custom*>),才能使用QSet< QSet<SomeClass*> >?
编辑:
补充问题:
在我的应用程序中,“集合集”最多可以包含 15000 个集合。每个子集最多有 25 个自定义类指针。如何保证qHash(QSet<Custom*>)足够独特?
【问题讨论】:
-
您确定
QSet<Custom*>吗?不应该是QSet<Custom,...>吗?QHash永远不会调用operator==的Custom,因为它使用内置的相等运算符作为指针。
标签: c++ qt hash containers