繁体   English   中英

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() 代码所期望的那样)。 相反,我的qDebug()为e1和e2(存储在我的地图中的qDebug()打印相同的值,而不是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中,而不是像我从values()实现中所期望的那样包含在e2中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM