gpt4 book ai didi

c++ - QMap 包含 return always true

转载 作者:太空宇宙 更新时间:2023-11-04 11:29:54 29 4
gpt4 key购买 nike

我有 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");

问题出在函数 contains 上。

mapIdResultInput.contains(IdResult(IdTask("b", "c"), "g"));

它总是返回true。我的代码有什么问题?

最佳答案

我将通过以下方式解决此问题:我将首先按 IdTask 对我的 IdResult 进行排序,如果 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

关于c++ - QMap 包含 return always true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25175647/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com