我不確定是否正確理解文檔。我想爲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