如何在QMap中获取第二个值<qstring,qmap <qstring,=“”qstring =“”>&gt; </qstring,>

时间:2014-12-02 21:16:53

标签: qt5 qstring qmap

我有结构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();

1 个答案:

答案 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();
}