QMap 运算符 <()
QMap operator <()
我不确定是否正确理解文档。我想为 QMultiMap
定义我自己的 <()
运算符,以便使用自定义类型并定义特定的 values(const Key &key)
行为。
所需的行为是检索具有相同组和搜索键 (src) 事件的所有值,以及与 src 中的初始部分匹配的有效负载字符串。示例:
我的地图中某个键中的有效载荷可能是:"HUB,PRESS*"。
如果 src 匹配组和事件值并具有以下有效负载:"HUB,PRESS,3" 应该检索上述元素(因为 src 有效负载以相同的字符串部分开头)。
这里是我的实现:
struct event_t {
int group;
int event;
QString payload;
};
inline bool operator <(const event_t &e1, const event_t &e2)
{
if (e1.group != e2.group) return e1.group < e2.group;
if (e1.event != e2.event) return e1.event < e2.event;
if (e2.payload.endsWith("*\""))
{
qDebug() << e1.payload << e2.payload;
QString s2 = e2.payload.mid(0, e2.payload.size() - 2);
QString s1 = e1.payload.mid(0, s2.size());
s1.append("\"");
s2.append("\"");
return s1 < s2;
}
return e1.payload < e2.payload;
}
这是一个简单的用例:
QMultiMap<event_t, event_t> m_map;
// fill with some items, one has the key like: "HUB,PRESS*"
event_t src;
// populate it
QList<event_t> dst = m_map.values(src);
问题是我从未看到针对可用项目的 src 调试打印(正如我从 values()
code 中预期的那样)。相反,我的 qDebug()
为 e1 e e2(存储在我的地图中的那个)打印相同的值,而从不为 src 打印相同的值。即:
"\"HUB,PRESS*\"" "\"HUB,PRESS*\""
也许我不明白这应该如何工作?
这里是工作代码:
inline bool operator <(const event_t &e1, const event_t &e2)
{
if (e1.group != e2.group) return e1.group < e2.group;
if (e1.event != e2.event) return e1.event < e2.event;
if (e1.payload.endsWith("*\""))
{
QString s1 = e1.payload.mid(0, e1.payload.size() - 2);
QString s2 = e2.payload.mid(0, s1.size());
s1.append("\"");
s2.append("\"");
return s1 < s2;
}
return e1.payload < e2.payload;
}
我不知道为什么,但是 src 值包含在 e1 而不是 e2 中,正如我对 values() 实现所期望的那样。
我不确定是否正确理解文档。我想为 QMultiMap
定义我自己的 <()
运算符,以便使用自定义类型并定义特定的 values(const Key &key)
行为。
所需的行为是检索具有相同组和搜索键 (src) 事件的所有值,以及与 src 中的初始部分匹配的有效负载字符串。示例:
我的地图中某个键中的有效载荷可能是:"HUB,PRESS*"。 如果 src 匹配组和事件值并具有以下有效负载:"HUB,PRESS,3" 应该检索上述元素(因为 src 有效负载以相同的字符串部分开头)。
这里是我的实现:
struct event_t {
int group;
int event;
QString payload;
};
inline bool operator <(const event_t &e1, const event_t &e2)
{
if (e1.group != e2.group) return e1.group < e2.group;
if (e1.event != e2.event) return e1.event < e2.event;
if (e2.payload.endsWith("*\""))
{
qDebug() << e1.payload << e2.payload;
QString s2 = e2.payload.mid(0, e2.payload.size() - 2);
QString s1 = e1.payload.mid(0, s2.size());
s1.append("\"");
s2.append("\"");
return s1 < s2;
}
return e1.payload < e2.payload;
}
这是一个简单的用例:
QMultiMap<event_t, event_t> m_map;
// fill with some items, one has the key like: "HUB,PRESS*"
event_t src;
// populate it
QList<event_t> dst = m_map.values(src);
问题是我从未看到针对可用项目的 src 调试打印(正如我从 values()
code 中预期的那样)。相反,我的 qDebug()
为 e1 e e2(存储在我的地图中的那个)打印相同的值,而从不为 src 打印相同的值。即:
"\"HUB,PRESS*\"" "\"HUB,PRESS*\""
也许我不明白这应该如何工作?
这里是工作代码:
inline bool operator <(const event_t &e1, const event_t &e2)
{
if (e1.group != e2.group) return e1.group < e2.group;
if (e1.event != e2.event) return e1.event < e2.event;
if (e1.payload.endsWith("*\""))
{
QString s1 = e1.payload.mid(0, e1.payload.size() - 2);
QString s2 = e2.payload.mid(0, s1.size());
s1.append("\"");
s2.append("\"");
return s1 < s2;
}
return e1.payload < e2.payload;
}
我不知道为什么,但是 src 值包含在 e1 而不是 e2 中,正如我对 values() 实现所期望的那样。