value()
возвращает постоянное значение, которое нельзя изменить, вместо этого Вы должны использовать итератор, используя метод find()
:
struct Test{
QString name;
int count = 0;
};
QMultiMap<QString, Test> map;
Test test;
test.name = "doc1";
map.insert("pen", test);
if(map.contains("pen")){
qDebug() << "before: " << map.value("pen").count;
QMultiMap<QString, Test>::iterator it = map.find("pen");
it->count += 10;
qDebug() << "after: " << map.value("pen").count;
}
Вывод:
before: 0
after: 10
Обновление:
В случае QMap вы должны использовать оператор [] , который возвращает ссылку на сохраненный файлзначение:
struct Test{
QString name;
int count = 0;
};
QMap<QString, Test> map;
Test test1;
test1.name = "doc1";
map.insertMulti("pen",test1);
Test test2;
test2.name = "doc2";
map.insertMulti("pen", test2);
if(map.contains("pen")){
qDebug() << "before: " << map.value("pen").count;
map["pen"].count++;
qDebug() << "after: " << map.value("pen").count;
}
Вывод:
before: 0
after: 1
Обновление:
Вы должны использовать find () дляполучите итератор первого элемента с ключом, и если вы хотите получить доступ к элементу с тем же ключом, вы должны увеличить итератор.
struct Test{
QString name;
int count = 0;
};
QMap<QString, Test> map;
Test test1;
test1.name = "doc1";
map.insertMulti("pen",test1);
Test test2;
test2.name = "doc2";
map.insertMulti("pen", test2);
if(map.contains("pen")){
// get the first item with the key
QMap<QString, Test>::iterator it = map.find("pen");
// the next element
it++;
// update value
it->count++;
}
for(const Test & value: map){
qDebug() << value.name << " " << value.count;
}
Вывод:
"doc2" 0
"doc1" 1