Причина проста: копировать при записи, т.е. неявный общий доступ
QList<QString> listInMap = map["eins"];
На данный момент у вас еще нет печатной копии, только «ссылка». Это несправедливо в стандартном смысле С++, но представьте себе это как «поверхностную копию». Однако, когда вы начнете добавлять сюда, список будет скопирован, а оригинал останется пустым. Это связано с тем, что QList реализован так же, как CoW (копирование при записи). )а>.
listInMap.append("test1");
listInMap.append("test2");
Кстати, вы можете взглянуть на QStringList. Хотя он наследует QList, он также имеет несколько дополнительных удобных методов.
Теперь вы можете спросить: How am I supposed to fill my map in, then?
.
Мульти карта
Лично я бы посоветовал использовать QMultiMap или хотя бы QMap
с insertMulti.
main.cpp
#include <QMap>
#include <QDebug>
#include <QString>
int main()
{
QMultiMap<QString, QString> map;
map.insert("eins", "test1");
map.insert("eins", "test2");
qDebug() << map.count();
return 0;
}
main.pro
TEMPLATE = app
TARGET = main
QT = core
SOURCES += main.cpp
Построить и запустить
qmake && make && ./main
Выход
2
Единая карта
Если вы придерживаетесь текущего подхода, я бы предложил либо добавить значение в новый QStringList, которым вы перезапишете значение, либо сохранить ссылку на тот же самый список.
Сказав это, в вашем случае кажется излишним даже рассматривать возможность вставки внешнего хранилища. По моему скромному мнению, вы должны сделать это немедленно.
main.cpp
#include <QMap>
#include <QDebug>
#include <QString>
int main()
{
QMap<QString, QStringList> map;
map.insert("eins", QStringList{"test1", "test2"});
qDebug() << map.value("eins").count();
return 0;
}
main.pro
TEMPLATE = app
TARGET = main
QT = core
CONFIG += c++11
SOURCES += main.cpp
Построить и запустить
qmake && make && ./main
Выход
2
person
lpapp
schedule
23.12.2014