Я не уверен, что правильно понял документы. Я хочу определить свой собственный оператор <()
для 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 e e2 (то, которое хранится в моей карте), а не значение src. То есть:
"\"HUB,PRESS*\"" "\"HUB,PRESS*\""
Может я не понял как это должно работать?
src.payload = "\"" + "HUB,PRESS,3" + "\"";
- person Mark   schedule 05.10.2017