说明
QSet支持自定义类对象,但需要类对象做特殊处理才可以。
- 添加全局函数qHash()。
- 运算符“==”重载。
- public拷贝构造函数。
- 必要时,需要重载“赋值-=”运算符。
程序实例
- 自定义类
class MyData1
{
public:
MyData1(int a, int b)
{
m_a=a;
m_b=b;
}
bool operator ==(const MyData1 &t) const
{
return (m_a==t.m_a&&m_b==t.m_b);
}
public:
//拷贝构造函数不能私有
MyData1(const MyData1& data1)
{
m_a=data1.m_a;
m_b=data1.m_b;
}
public:
int m_a;
int m_b;
};
uint qHash(const MyData1 &key, uint seed=0);
uint qHash(const MyData1 &key, uint seed)
{
return key.m_a+key.m_b+seed;
}
- QSet使用自定义类
void DataObject::testSet2()
{
QSet<MyData1> set;
MyData1 d1(10, 11);
MyData1 d2(11, 10);
set.insert(d1);
set.insert(d2);
set.insert(d1);
set.insert(d2);
qDebug()<<set.size();
qDebug()<<set.contains(d1);
}