[英]QMap contains return always true
我有IdTask类的代码
class IdTask
{
public:
IdTask(QString host, QString id) : _host(host), _id(id) {}
IdTask(const IdTask & idT) : _host(idT._host), _id(idT._id) {}
QString host() const { return _host;}
QString id() const { return _id;}
inline bool operator ==(const IdTask& idT) const { return _host == idT.host() && _id == idT.id();}
inline bool operator <(const IdTask& idT) const { return _host < idT.host() && _id < idT.id();}
private:
QString _host;
QString _id;
};
和类IdResult
class IdResult
{
public:
IdResult(IdTask idT, QString id) : _idTask(idT), _id(id) {}
IdTask idTask() const { return _idTask;}
QString id() const { return _id;}
bool operator < (const IdResult& idR) const { return _idTask < idR.idTask() && _id < idR.id();}
private:
IdTask _idTask;
QString _id;
};
我这样创建一个QMap:
QMap<IdResult, QString> mapIdResultInput;
mapIdResultInput.insert(IdResult(IdTask("localhost", "init"), "a"), "_a");
问题出在函数包含。
mapIdResultInput.contains(IdResult(IdTask("b", "c"), "g"));
它总是返回true
。 我的代码有什么问题?
我将通过以下方式解决此问题:首先将IdResult
排序为IdTask
,然后如果IdTask
相等, IdTask
id
排序。 这是我在类中对运算符的实现:
class IdTask
{
public:
[..]
bool operator ==(const IdTask& idT) const
{ return _host == idT.host() && _id == idT.id(); }
bool operator <(const IdTask& idT) const
{ return (_host < idT.host()) || (_host == idT.host() && _id < idT.id()); }
[..]
};
和
class IdResult
{
[..]
bool operator < (const IdResult& idR) const
{ return (_idTask < idR.idTask()) || (_idTask == idR.idTask() && _id < idR.id()); }
[..]
};
和测试
QMap<IdResult, QString> mapIdResultInput;
mapIdResultInput.insert(IdResult(IdTask("localhost", "init"), "a"), "_a");
bool b = mapIdResultInput.contains(IdResult(IdTask("b", "c"), "g")); // false
b = mapIdResultInput.contains(IdResult(IdTask("localhost", "init"), "a")); // true
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.