我不确定是否正确理解文档。我想为QMultiMap
定义我自己的<()
运算符,以便使用自定义类型并定义特定的values(const Key &key)
行为。QMap运算符<()
的期望的行为是检索所有具有相同组与检索键(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()
为e1e2(存储在我的地图中)打印相同的值,而不是src。即:
"\"HUB,PRESS*\"" "\"HUB,PRESS*\""
也许我不明白这应该是如何工作的?
是的,我敢肯定。测试我把它设置为:'src.payload =“\”“+”HUB,PRESS,3“+”\“”;' – Mark
@StoryTeller对不起,您是对的。我是一个固件的家伙,我已经习惯用C ... – Mark
写@drescherjm该行的作品,我可以看到qDebug()输出!问题是我无法像示例中那样匹配字符串的开头。 – Mark