首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从嵌套QMap中获取值

从嵌套QMap中获取值
EN

Stack Overflow用户
提问于 2016-06-23 19:10:51
回答 3查看 2.1K关注 0票数 0

我有一个嵌套的QMap QMap <QString, QMap<QString, QVariant> > map

和临时的QMap QMap <QString, QVariant> tmpMap

我需要用内部QMap的键和值填充临时QMap,这样我就可以

循环并输出嵌套QMap的所有值。

这是我目前的代码

代码语言:javascript
复制
QMap <QString, QMap<QString, QVariant> > map;
QMap <QString, QVariant> tmpMap;
QList<QString> mapKeys = map.keys();

for(int index = 0; index < mapKeys.size(); ++index)
{
  tmpMap.unite(map.value(QString(index)));
  QList<QString> tmpMapKeys = tmpMap.keys()

    for(int index2 = 0, index2 < tmpMapKeys.size(); ++index2)
    {
      //Stuff to check and output
    }
}

但是,第二个for循环从未运行,因为tmpMap从不存储任何内容。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-06-23 23:49:25

QString(index)不像你想的那样做。您可能会想到QString::number(index),但即使这样,如果任何键的值都不是在您迭代的有限范围内的数字,则它也无法工作。您确实应该使用mapKeys.at(index):它会让您的代码正常工作。但是,您根本不应该将映射的键复制到mapKeys中:这是过早的悲观。

谢天谢地,C++11‘使这一切变得简单和简洁。您可以使用范围来迭代map的值--内部映射。您可以使用推导式的const来迭代累积的allInners映射的键/值对。

代码语言:javascript
复制
#include <QtCore>

int main() {
   QMap<QString, QMap<QString, QVariant>> map;
   QMap<QString, QVariant> allInners;

   // accumulate the inner keys/values
   for (auto const & inner : map)
      allInners.unite(inner);

   // process the inner keys/values
   for (auto it = allInners.cbegin(); it != allInners.cend(); ++it)
      qDebug() << it.key() << it.value();
}
票数 1
EN

Stack Overflow用户

发布于 2016-06-23 20:10:56

就像platonshubin说的,第一个循环中的关键不是很清楚,而不是:

代码语言:javascript
复制
tmpMap.unite(map.value(QString(index)));

试一试

代码语言:javascript
复制
tmpMap.unite(map.value(mapKeys.at(index)));
票数 1
EN

Stack Overflow用户

发布于 2016-06-23 19:46:34

写map.value(QString(索引))是什么意思?至少对我来说,这是相当模糊的。例如,如果我编写QString (0x40 ),我将得到一个包含@字符的字符串(0x40是它的代码),我猜您也是这样做的,即调用QString(int)。因此,尝试更明确地编写。

为了遍历一些容器,我建议您使用非常有用的迭代器。使用情况如下(不过,没有测试代码):

代码语言:javascript
复制
QMap <QString, QMap<QString, QVariant> > map;
QMap <QString, QMap<QString, QVariant> >::const_iterator i;
QMap<QString, QVariant>::const_iterator i2;

for (i = map.begin(); i != map.end(); i++)
{
    for (i2 = i.value.begin(); i2 != i.value.end(); i2++)
    {
        //Access to all the keys and values of nested QMap here
        //i2.key() is some QString and i2.value() is some QVariant
        //Stuff to check and output
    }
}

AFAIK在QMap、QHash等方面没有常用的索引。如果您有一些QMap,那么您需要知道确切的字符串才能根据特定的QString得到“某事”。如果"Hello,world“转到Something smth,那么如果您编写map.value("Hello,world"),您将得到这个'smth‘对象。要检查所有的QMap条目,请使用我前面提到的迭代器。

如果您需要按其编号获取某个内容,那么我建议您使用standart数组、列表、集合、队列、堆栈等。

P.S. kmx78 78的方式也适用于你。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37999901

复制
相关文章

相似问题

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