Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何创建迭代器的QSet_C++_Qt_Hash_Iterator - Fatal编程技术网

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
    then
    hash(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);
    }