C++ 如何创建迭代器的QSet
我想做的是:C++ 如何创建迭代器的QSet,c++,qt,hash,iterator,C++,Qt,Hash,Iterator,我想做的是: #include <QVector> #include <QLinkedList> #include <QSet> class MyType { //... }; int main(int argc, char** argv) { QVector<MyType> vector; QSet<QVector<MyType>::iterator> a; a.insert(vector.be
#include <QVector>
#include <QLinkedList>
#include <QSet>
class MyType
{
//...
};
int main(int argc, char** argv)
{
QVector<MyType> vector;
QSet<QVector<MyType>::iterator> a;
a.insert(vector.begin()); // This is fine
QLinkedList<MyType> linkedList;
QSet<QLinkedList<MyType>::iterator> b;
b.insert(linkedList.begin()); // This does not compile
return 0;
}
因此,我尝试以这种方式定义函数:
uint qHash(QLinkedList<MyType>::iterator it)
{
return qHash(it.i);
}
uint-qHash(QLinkedList::iterator-it)
{
返回qHash(it.i);
}
程序已经编译,但我对我的解决方案没有信心。如何正确地重载
qHash
函数?您已经做得很好了。哈希函数的基本规则是:
x=y
则hash(x)=hash(y)
x!=y
thenhash(x)!=散列(y)
(尽可能频繁)。这不是一个严格的规则,但遵循得越好,哈希表的性能就越好。理想情况下,输出将显示为随机ia
和ib
相等(指同一节点),那么它们的内部指针,ia.i
和ib.i
将相等。这就是规则1。然后在这些指针上使用内置的哈希函数;Qt为您处理规则2
干杯
class iterator
{
public:
...
Node *i;
...
};
uint qHash(QLinkedList<MyType>::iterator it)
{
return qHash(it.i);
}