2014-12-02 676 views
0

我有结构QMap<QString, QMap<QString, QString> > *map;如何在QMAP获得第二个值<QString的,QMAP <QString的,的QString>>

接下来我插入数据:

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(); 

回答

2

在你实现第一个地图包含内部地图(您的变量d )。

想象一下,你有另一个元素在d--map中,比如Age。然后你会添加其他元素:

d->insert("Age", "42"); 

如果现在只想尝试打印p->key()在你尝试,你可以不知道“时代”和其“名”变量,你将访问,因此你需要第二个迭代器。

如果你想打印内部地图的所有键和值,您可以创建一个迭代的第二个地图和,并打印值一个新的迭代:

QMapIterator<QString, QString > i2(i.value()); 
while (i2.hasNext()) { 
    i2.next(); 
    qDebug() << " Key: " << i2.key() << " Value: " << i2.value() << endl; 
} 

或者你可以遍历在内的地图带有.begin()和.end()检查的“STL-way”:

QMap<QString, QString>::const_iterator i2; 
for (i2 = i.value().begin(); i2 != i.value().end(); ++i2){ 
    qDebug() << " Key: " << i2.key() << " Value: " << i2.value(); 
}