QMap contains return always true
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");
问题在于函数contains。
mapIdResultInput.contains(IdResult(IdTask("b", "c"), "g"));
它总是返回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()); }
[..]
};
和
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
相关文章:
- 无论条件是否为true,if总是在c++中执行
- flutter:即使shouldRepaint()返回true,自定义画家也不会重新绘制
- 如果条件为TRUE(最佳方式?),则在do while循环中后置增量
- Arduino-C++ bool 不会从 false 变为 true
- 如何使布尔变量仅在设置为 true 时才为真?
- C++ 如果在 if 为 true 之后运行,为什么还会这样做
- 为什么组合的上限和下限比较的计算结果总是为 true?
- 对于完成布尔值设置为 true 后未停止的循环
- 为什么'typeid(x) == typeid(y)'的计算结果为 true,其中 'x' 和 'y' 分别是 T 和 T& 类型的 id-表达式?
- OLE DB 大容量复制操作始终将 true 加载到位列中
- cin.fail() not returning true
- Fmod 函数清楚地输出一个预期的双精度值,但 if(fmod == 预期的双精度值)的计算结果不是 true
- 如何使用boost定义布尔类,可能的值应该是TRUE或FALSE?
- 我在OpenCV中有错误的"approxPolyDP(ROI_Vertices, ROI_Poly, 1.0, true)"
- 如果语句表达式调用函数,则需要测试是否为 true
- 如何检查条件是否为 true 5 秒?
- ROS CPP 相当于 Python subprocess.call() 和 shell=True
- "Condition is always true"当我知道它不是
- 为什么"the adress of bool will always evaluate as true"会在这里?
- QMap contains return always true