QtにおけるQSetの使用
先日QSetをカスタム構造体(以下のプログラムのように)として保存しようとしたが、死活に成功しなかった.の
それからまたフォーラムの上で人に闻いて、耻ずかしくて大きくなくなりました..
以下の例は誤りです
コードは次のとおりです.
後に達人の注意を経て、更に自分でドキュメントを見て、やっと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)関数
くだらないことを言って、正しいコードをつけます.
上記のQt QSetは、標準テンプレートライブラリのSetと簡単に比較されます.
それからまたフォーラムの上で人に闻いて、耻ずかしくて大きくなくなりました..
以下の例は誤りです
コードは次のとおりです.
#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と簡単に比較されます.