C++ 从嵌套QMap中获取值
我有一个嵌套的QMapC++ 从嵌套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
和临时QMapQMap 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