Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从嵌套QMap中获取值_C++_Qt_Qmap - Fatal编程技术网

C++ 从嵌套QMap中获取值

C++ 从嵌套QMap中获取值,c++,qt,qmap,C++,Qt,Qmap,我有一个嵌套的QMapQMap 和临时QMapQMap tmpMap 我需要用内部QMap的键和值填充临时QMap,以便 循环并输出嵌套QMap的所有值 这是我目前的代码 QMap <QString, QMap<QString, QVariant> > map; QMap <QString, QVariant> tmpMap; QList<QString> mapKeys = map.keys(); for(int index = 0; inde

我有一个嵌套的QMap
QMap

和临时QMap
QMap tmpMap

我需要用内部QMap的键和值填充临时QMap,以便

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

这是我目前的代码

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
    }
}
QMap;
QMap-tmpMap;
QList mapKeys=map.keys();
对于(int index=0;index

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

写入map.value(QString(index))是什么意思? 至少对我来说,这是相当模糊的。在这个例子中,如果我写QString(0x40),我将得到一个包含@character的字符串(0x40是它的代码),我想您也在做同样的事情,即调用QString(int)。所以试着写得更明确些

为了遍历一些容器,我建议您使用非常有用的迭代器。用法如下(但代码未经测试):

QMap;
QMap::const_迭代器i;
QMap::const_迭代器i2;
for(i=map.begin();i!=map.end();i++)
{
对于(i2=i.value.begin();i2!=i.value.end();i2++)
{
//在此处访问嵌套QMap的所有键和值
//i2.key()是一些QString,i2.value()是一些QVariant
//要检查和输出的内容
}
}
另外,在QMap、QHash等东西中没有常用的索引。如果您有一些QMap,那么您需要知道确切的字符串,以便根据某些QString获取“某物”。如果“Hello,world”转到
Something smth
,那么如果您编写map.value(“Hello,world”),您将得到这个“smth”对象。要检查所有QMap条目,请使用我上面提到的迭代器

如果您需要通过数字获取某些内容,那么我建议您使用标准阵列、列表、集合、队列、堆栈等


另外,kmx78的方法也应该适用于您。

编写map.value(QString(index))是什么意思? 至少对我来说,这是相当模糊的。在这个例子中,如果我写QString(0x40),我将得到一个包含@character的字符串(0x40是它的代码),我想您也在做同样的事情,即调用QString(int)。所以试着写得更明确些

为了遍历一些容器,我建议您使用非常有用的迭代器。用法如下(但代码未经测试):

QMap;
QMap::const_迭代器i;
QMap::const_迭代器i2;
for(i=map.begin();i!=map.end();i++)
{
对于(i2=i.value.begin();i2!=i.value.end();i2++)
{
//在此处访问嵌套QMap的所有键和值
//i2.key()是一些QString,i2.value()是一些QVariant
//要检查和输出的内容
}
}
另外,在QMap、QHash等东西中没有常用的索引。如果您有一些QMap,那么您需要知道确切的字符串,以便根据某些QString获取“某物”。如果“Hello,world”转到
Something smth
,那么如果您编写map.value(“Hello,world”),您将得到这个“smth”对象。要检查所有QMap条目,请使用我上面提到的迭代器

如果您需要通过数字获取某些内容,那么我建议您使用标准阵列、列表、集合、队列、堆栈等


p.S.kmx78的方法也应该适用于您。

正如柏拉图所说,第一个循环中的关键点不是很清楚,而是:

tmpMap.unite(map.value(QString(index)));
试一试


正如柏拉图所说,第一个循环中的关键点不是很清楚,而是:

tmpMap.unite(map.value(QString(index)));
试一试

QString(index)
的作用与您认为的不同。您可能会想到
QString::number(index)
,但即使如此,如果任何键的值不在您迭代的有限范围内,它也不会起作用。你真的应该使用
映射键。在(索引)
:它会让你的代码正常工作。但你根本不应该把地图的键复制到
mapKeys
中:这是过早的悲观

谢天谢地,C++11'使所有这些变得简单和简洁。您可以使用range for来迭代
map
的值-内部映射。然后,您可以使用推断类型常量迭代器来迭代累积
alliners
map的键/值对

#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();
}
#包括
int main(){
QMap地图;
QMap Alliners;
//累积内部键/值
用于(自动常量和内部:映射)
联合(内部);
//处理内部键/值
for(auto it=allInners.cbegin();it!=allInners.cend();++it)
qDebug()这个
QString(index)
并没有做你认为它能做的事情。你可能会想到
QString::number(index)
,但即使这样,如果任何键的值不是你迭代的有限范围内的数字,它也不会起作用。你真的应该使用
mapKeys.at(index)
:这会让你的代码正常工作。但你根本不应该把地图的键复制到
mapKeys
中:这是过早的悲观

谢天谢地,C++11'使所有这些都变得简单和简洁。您可以使用range for来迭代
map
的值-内部映射。您可以使用推断类型常量迭代器,然后迭代累积
alliners
映射的键/值对

#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();
}
#包括
int main(){
QMap地图;
QMap Alliners;
//累积内部键/值
用于(自动常量和内部:映射)
联合(内部);
//处理内部键/值
for(auto it=allInners.cbegin();it!=allInners.cend();++it)

qDebug()原始
map
是如何填充的?您是否尝试在
for
循环的开头检查其内容?原始map在另一个函数中填充,并且在我将其传递到我正在使用的函数中时包含所有内容。inI仍建议为
行设置点,步骤ove