QtにおけるQSetの使用


先日QSetをカスタム構造体(以下のプログラムのように)として保存しようとしたが、死活に成功しなかった.の
それからまたフォーラムの上で人に闻いて、耻ずかしくて大きくなくなりました..
以下の例は誤りです
コードは次のとおりです.
#include    
struct node  
{  
    int cx, cy;  
    bool operator  ss;  
    QSet::iterator iter;  
    node temp;  
    int i, j;  
    for(i=0,j=100;i<101;i++,j--)  
    {  
        temp.cx = i;  
        temp.cy = j;  
        ss.insert(temp);  
    }  
    for(iter=ss.begin();iter!=ss.end();++iter)  
        qDebug() <cx <cy;  
  
    return 0;  
}

後に達人の注意を経て、更に自分でドキュメントを見て、やっとQSetとSTLのsetが本質的な違いがあることを発見して、それらの名前はとても似ていますが、前者はハッシュ表に基づいて、後者は赤と黒の木の変種です..
QTドキュメントには、In addition,the type must provide operator=()、and there must also be a global qHash()function that returns a hash value for an argument of the key's typeと明記されている. 
簡単に言えば、
QSetはハッシュアルゴリズムに基づいており、カスタム構造体Typeが提供しなければならない.
1. bool operator == (const Type &b) const
2.グローバルなuint qHash(Type key)関数
くだらないことを言って、正しいコードをつけます.
#include   
  
struct node  
{  
    int cx, cy;  
    bool operator  ss;  
    QSet::iterator iter;  
    node temp;  
    int i, j;  
    for(i=0,j=100;i<101;i++,j--)  
    {  
        temp.cx = i;  
        temp.cy = j;  
        ss.insert(temp);  
    }  
    for(iter=ss.begin();iter!=ss.end();++iter)  
        qDebug() <cx <cy;  
  
    return 0;  
}

上記のQt QSetは、標準テンプレートライブラリのSetと簡単に比較されます.