需求

Qt 中 QMap 有哪些遍历方法?

解决

迭代器

只读

for (QMap<QString, int>::const_iterator itor = map.constBegin(); itor != map.constEnd(); ++itor)
{
      qDebug() << itor.key() << ":" << itor.value();
}

可读可写

QMap<QString, int>::iterator itor;
for (itor = map.begin(); itor != map.end(); ++itor)
{
      qDebug() << itor.key() << ":" << itor.value();
}

可读可写,更多功能,比如 remove

QMapIterator<QString, int> itor(map);
while (itor.hasNext())
{
      itor.next(); //移动到下一个元素
    qDebug() << itor.key() << ":" << itor.value();
}

c++11 遍历

toStdMap

for (auto &pair : map.toStdMap())
{
      qDebug() << pair.first << ":" << pair.second;
}

keys

for (const auto &key : map.keys())
{
      qDebug() << key << ":" << map.value(key);
}

Q_FOREACH

foreach(const QString &key, map.keys())
{
   qDebug() << key << ":" << map.value(key);
}

std::for_each()

std::for_each(map.constBegin(), map.constEnd(), [](const auto &item) {
      qDebug() << item.key() << ":" << item.value();
});

参考