Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ QMap包含始终为true的返回_C++_Qt_Qmap - Fatal编程技术网

C++ QMap包含始终为true的返回

C++ QMap包含始终为true的返回,c++,qt,qmap,C++,Qt,Qmap,我有这个类任务的代码 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 oper

我有这个类任务的代码

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;
};
它总是返回
true

我的代码有什么问题?

我会用以下方法解决这个问题:我会先按
IdTask
对我的
IdResult
s排序,然后,如果
IdTask
s相等,则按
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()); }
    [..]
};
类IdTask
{
公众:
[..]
布尔运算符==(常量IdTask&idT)常量
{return _host==idT.host()&&&&u id==idT.id();}

bool操作符如果
QMap
类似于
std::map
(文档说它是一棵红黑树),那么它就需要对键进行严格的弱排序,大概是从
操作符why my
操作符例如
{99,2}{100,1}
{100,1}{99,2}是false。这使得你的排序都是等价的。我怀疑它。如果你需要一个排序,哈希就不行了。你可以实现一个基于主机和ID的字典比较,但是你必须确保如果第一个主机是第二个主机,你立即返回true,你甚至不考虑ID。你只考虑TID时的ID。e主机是相等的。请参见,也请参见。
QMap<IdResult, QString> mapIdResultInput;
mapIdResultInput.insert(IdResult(IdTask("localhost", "init"), "a"), "_a");
mapIdResultInput.contains(IdResult(IdTask("b", "c"), "g"));
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