2014-12-02 170 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(); 
}