I have this code for the class 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;
};
And the class 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;
};
I create a QMap like this :
QMap<IdResult, QString> mapIdResultInput;
mapIdResultInput.insert(IdResult(IdTask("localhost", "init"), "a"), "_a");
The problem is with the function contains.
mapIdResultInput.contains(IdResult(IdTask("b", "c"), "g"));
It return always true.
What is the problem with my code?
QMapis anything likestd::map(and the docs say it is a red-black tree), then it would need a strict weak ordering for the keys, presumably taken fromoperator<. Yours isn't a strict weak ordering. You need to fix that for the map to work. - juanchopanzaoperator<isn't a strict weak ordering? - artoon{99, 2} < {100, 1}and{100, 1} < {99, 2}are false. That makes both equivalent in your ordering. - juanchopanzastd::tie. - juanchopanza