首页 > 其他 > 详细

QSet<T>自定义类型需要定义==和qHash()函数

时间:2020-09-15 12:47:34      阅读:110      评论:0      收藏:0      [点我收藏+]

If you want to use other types as the key, make sure that you provide operator==() and a qHash() implementation.

#ifndef EMPLOYEE_H
#define EMPLOYEE_H

class Employee
{
public:
    Employee() {}
    Employee(const QString &name, QDate dateOfBirth);
    ...

private:
    QString myName;
    QDate myDateOfBirth;
};

inline bool operator==(const Employee &e1, const Employee &e2)
{
    return e1.name() == e2.name()
           && e1.dateOfBirth() == e2.dateOfBirth();
}

inline uint qHash(const Employee &key, uint seed)
{
    return qHash(key.name(), seed) ^ key.dateOfBirth().day();
}

#endif // EMPLOYEE_H

In the example above, we‘ve relied on Qt‘s global qHash(const QString &, uint) to give us a hash value for the employee‘s name, and XOR‘ed this with the day they were born to help produce unique hashes for people with the same name.

Note that the implementation of the qHash() overloads offered by Qt may change at any time. You must not rely on the fact that qHash() will give the same results (for the same inputs) across different Qt versions.

QSet<T>自定义类型需要定义==和qHash()函数

原文:https://www.cnblogs.com/Stephen-Qin/p/13672059.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!