2025年史上最全的QMap遍历方式

史上最全的QMap遍历方式QMap 是 Qt 中的一个关联容器 它提供了一种键值对的映射关系 可以通过键快速查找对应的值 遍历 QMap 可以使用以下几种方式 QMap lt QString int gt map map insert a 1 map insert b 2 map

大家好,我是讯享网,很高兴认识大家。

QMap是Qt中的一个关联容器,它提供了一种键值对的映射关系。可以通过键快速查找对应的值。遍历QMap可以使用以下几种方式:

 QMap<QString, int> map; map.insert("a", 1); map.insert("b", 2); map.insert("c", 3); 

讯享网

第一种:迭代器遍历

1. 可以修改容器中的元素值,是可读可写的遍历方式。
讯享网QMap<QString, int>::iterator itor; for (itor = map.begin(); itor != map.end(); ++itor) { 
    qDebug() << itor.key() << ":" << itor.value(); } 
2. 使用了const_iterator,不能修改容器中的元素值,是只读的遍历方式。其中constBegin()返回指向QMap开头的常量迭代器,constEnd()返回指向QMap结尾的常量迭代器,itor.key()返回当前迭代器指向的键,itor.value()返回当前迭代器指向的值。
for (QMap<QString, int>::const_iterator itor = map.constBegin(); itor != map.constEnd(); ++itor) { 
    qDebug() << itor.key() << ":" << itor.value(); } 
3. 使用了QMapIterator,也可以修改容器中的元素值,是可读可写的遍历方式。与第一种遍历方式相比,QMapIterator提供了更多的功能,例如可以使用remove()函数删除当前迭代器指向的元素。
讯享网QMapIterator<QString, int> itor(map); while (itor.hasNext()) { 
    itor.next(); //移动到下一个元素  qDebug() << itor.key() << ":" << itor.value(); } 

第二种:C++11的for循环遍历

1.使用了QMap的toStdMap()函数将QMap转换为std::map。
for (auto &pair : map.toStdMap()) { 
    qDebug() << pair.first << ":" << pair.second; } 
2.使用QMap的keys()函数获取所有键的列表
讯享网for (const auto &key : map.keys()) { 
    qDebug() << key << ":" << map.value(key); } 

第三种:Qt中的Q_FOREACH循环遍历

Q_FOREACH在Qt 2 中被引入,在 Qt 4 中进行了重构和改进,成为了一个更加强大和灵活的语言结构。


讯享网

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

第四种:std::for_each()算法遍历

std::for_each()接受一个迭代器范围和一个函数对象,函数对象可以是lambda表达式,用于处理每个遍历到的元素。

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

总结

使用C++11的for循环遍历和std::for_each遍历QMap的方式最为常用和简洁,效率也比较高,占用资源较少。但是,不同的遍历方式适用于不同的场景,需要根据具体情况选择合适的遍历方式。如果需要修改QMap中的元素,应该使用迭代器进行遍历。如果只需要读取QMap中的元素,可以使用const迭代器或者C++11的for循环遍历。

小讯
上一篇 2025-01-10 10:52
下一篇 2025-01-09 08:39

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/123334.html