我有结构QMap<QString, QMap<QString, QString> > *map;
接下来我插入数据:
map = new QMap<QString,QMap<QString, QString> >;
QMap<QString,QString> *d = new QMap<QString, QString>;
d->insert("Name","Michal");
map->insert("QLineEdit",*d);
如果我尝试
QMapIterator<QString, QMap<QString, QString> > i(*mapa);
while (i.hasNext()) {
i.next();
qDebug() << "Key: " << i.key() << " Value: " << i.value() << endl;
}
我明白了:
Key: "QLineEdit" Value: QMap(("Name", "Michal")).
如何将Name
设为键,将Michal
设为值?
我试过了:
QMap<QString, QString> *p = new QMap<QString, QString>;
*p = i.value();
qDebug() << "Key: " << p->key() << " Value: " << p->value();
但它不起作用,我得到以下错误:
no matching function for call to 'QMap<QString, QString>::key()' qDebug()` << "Key: " << p->key() << " Value: " << p->value();
答案 0 :(得分:2)
在您的实现中,第一张地图包含内部地图(您的变量 d )。
想象一下,你在 d -map中有另一个元素,比如Age。然后你会添加另一个元素:
d->insert("Age", "42");
如果您现在只是尝试打印p->key()
,就像在您的尝试中一样,您无法知道哪个&#34;年龄&#34;和&#34;姓名&#34;你可以访问的变量,因此你需要第二个迭代器。
如果要打印此内部映射的所有键和值,可以创建一个新的迭代器,迭代第二个映射并获取并打印值:
QMapIterator<QString, QString > i2(i.value());
while (i2.hasNext()) {
i2.next();
qDebug() << " Key: " << i2.key() << " Value: " << i2.value() << endl;
}
或者你可以在&#34; STL-way&#34;中迭代内部地图。使用.begin()和.end()检查:
QMap<QString, QString>::const_iterator i2;
for (i2 = i.value().begin(); i2 != i.value().end(); ++i2){
qDebug() << " Key: " << i2.key() << " Value: " << i2.value();
}