首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在QMap<QString、QMap<QString、QString> >中获得第二个值

如何在QMap<QString、QMap<QString、QString> >中获得第二个值
EN

Stack Overflow用户
提问于 2014-12-02 21:16:53
回答 1查看 2.2K关注 0票数 0

我有结构QMap<QString, QMap<QString, QString> > *map;

接下来,我插入数据:

代码语言:javascript
复制
map = new QMap<QString,QMap<QString, QString> >;
QMap<QString,QString> *d = new QMap<QString, QString>;
d->insert("Name","Michal");
map->insert("QLineEdit",*d);

如果我试着

代码语言:javascript
复制
QMapIterator<QString, QMap<QString, QString> > i(*mapa);
    while (i.hasNext()) {
        i.next();
        qDebug() << "Key: " << i.key() << " Value: " << i.value() << endl;

    }

我得到:

代码语言:javascript
复制
Key:  "QLineEdit"  Value:  QMap(("Name", "Michal")).

如何获得Name作为Michal作为

我试过:

代码语言:javascript
复制
QMap<QString, QString> *p = new QMap<QString, QString>;
  *p = i.value();
  qDebug() << "Key: " << p->key() << " Value: " << p->value();

但是它不起作用,我得到了以下错误:

代码语言:javascript
复制
no matching function for call to 'QMap<QString, QString>::key()' qDebug()` << "Key: " << p->key() << " Value: " << p->value();
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-02 22:17:00

在您的实现中,第一个映射包含一个内部映射(变量d)。

想象一下,在d图中有另一个元素,比如年龄。那么您将添加另一个元素:

代码语言:javascript
复制
d->insert("Age", "42");

如果您现在只想像在尝试中那样打印p->key(),您就无法知道要访问的“年龄”和“名称”变量中的哪个,因此需要第二个迭代器。

如果要打印此内部映射的所有键和值,则可以创建一个新的迭代器,该迭代器将迭代第二个映射并获取和打印该值:

代码语言:javascript
复制
QMapIterator<QString, QString > i2(i.value());
while (i2.hasNext()) {
  i2.next();
  qDebug() << "  Key: " << i2.key() << " Value: " << i2.value() << endl;
}

或者,您可以使用.begin()和.end()检查在"STL-way“中迭代内部映射:

代码语言:javascript
复制
QMap<QString, QString>::const_iterator i2;
for (i2 = i.value().begin(); i2 != i.value().end(); ++i2){
  qDebug() << "  Key: " << i2.key() << " Value: " << i2.value();
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27259123

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档