The QT container: QMap, QHash, QList
2016-05-17 22:26
627 查看
今天就搞一搞QT中的容器。
首先,我不是分享每个容器是怎样工作的,只是分享一下在实际开发过程中遇到的问题。
场景:
从服务器拿到了json数组,其中name和number是我们想要保存的,所以第一印象就是使用QMap了,以key-value的形式存储。
一切都很完美:
QMap
一切都很完美,但是发现与服务器端的顺序是不一样的。
输出:
这里不需要大惊小怪,在C++ STL MAP中就知道了 map是按key进行排序的,以便提高效率。
所以我们不需要排序,于是,我们使用QHash替代QMap。
QHash
输出:
再运行一次输出:
看到了吧,每次输出是随机的,问题就是出在我们遍历qhash哈希的时候,迭代器是随机的。
这个时候QMap,QHash都没有达到我们的目的,这个时候可以使用QList了。
QList和QPair
这两个配合很好用:
等等,什么情况,居然报错!!!!!
error: array used as initializer
于是进行修改:
运行结果:
达到目的,完美!
首先,我不是分享每个容器是怎样工作的,只是分享一下在实际开发过程中遇到的问题。
场景:
从服务器拿到了json数组,其中name和number是我们想要保存的,所以第一印象就是使用QMap了,以key-value的形式存储。
一切都很完美:
QMap
QMap<QString, QString> map; map.insert("beijing", "111"); map.insert("shanghai", "021"); map.insert("tianjin", "022"); map.insert("chongqing", "023"); map.insert("jinan", "0531"); map.insert("wuhan", "027"); QMap<QString, QString>::const_iterator i; for( i=map.constBegin(); i!=map.constEnd(); ++i) { qDebug() <<i.key() <<" " <<i.value(); }
一切都很完美,但是发现与服务器端的顺序是不一样的。
输出:
"beijing" "111" "chongqing" "023" "jinan" "0531" "shanghai" "021" "tianjin" "022" "wuhan" "027"
这里不需要大惊小怪,在C++ STL MAP中就知道了 map是按key进行排序的,以便提高效率。
所以我们不需要排序,于是,我们使用QHash替代QMap。
QHash
QHash<QString, QString> hash; hash.insert("beijing", "111"); hash.insert("shanghai", "021"); hash.insert("tianjin", "022"); hash.insert("chongqing", "023"); hash.insert("jinan", "0531"); hash.insert("wuhan", "027"); for (auto it = hash.begin(); it != hash.end(); it++) { qDebug() << it.key() << " " <<it.value(); }
输出:
"wuhan" "027" "jinan" "0531" "shanghai" "021" "tianjin" "022" "chongqing" "023" "beijing" "111"
再运行一次输出:
"chongqing" "023" "jinan" "0531" "beijing" "111" "shanghai" "021" "wuhan" "027" "tianjin" "022"
看到了吧,每次输出是随机的,问题就是出在我们遍历qhash哈希的时候,迭代器是随机的。
这个时候QMap,QHash都没有达到我们的目的,这个时候可以使用QList了。
QList和QPair
这两个配合很好用:
QList<QPair<QString, QString>> list; list.append(qMakePair("beijing", "111")); list.append(qMakePair("shanghai", "021")); list.append(qMakePair("tianjin", "022")); list.append(qMakePair("chongqing", "023")); list.append(qMakePair("jinan", "0531")); list.append(qMakePair("wuhan", "027")); for(int i = 0; i < list.size(); i++) { qDebug() << list.at(i).first << " " << list.at(i).second; }
等等,什么情况,居然报错!!!!!
error: array used as initializer
于是进行修改:
QList<QPair<QString, QString>> list; list.append(qMakePair(QString("beijing"), QString("111"))); list.append(qMakePair(QString("shanghai"), QString("021"))); list.append(qMakePair(QString("tianjin"), QString("022"))); list.append(qMakePair(QString("chongqing"), QString("023"))); list.append(qMakePair(QString("jinan"), QString("0531"))); list.append(qMakePair(QString("wuhan"), QString("027"))); for(int i = 0; i < list.size(); i++) { qDebug() << list.at(i).first << " " << list.at(i).second; }
运行结果:
"beijing" "111" "shanghai" "021" "tianjin" "022" "chongqing" "023" "jinan" "0531" "wuhan" "027"
达到目的,完美!
相关文章推荐
- PCL QT VS 可视化PolygonMesh
- config libigl in qt through cmake under ubuntu
- qte安装dbus
- Ubuntu14.04下QT开发环境搭建步骤
- ubuntu16.04 启动qtcreator 无法加载help
- 正确使用Qt多线程
- QT widget设置QT::FramelessWindowHint和Qt::WA_TranslucentBackground,会出现一个bug:在最小化还原时界面停止刷新
- QT学习之三---定义窗口并实现简单布局
- Qt之图形(简笔画-绘制卡通蚂蚁)
- Qt之图形(简笔画-绘制卡通蚂蚁)
- qt的一些基础知识
- Qt4 和 Qt5 模块的分类
- 自己的选择: Qt VS MFC
- QT 相关资源(书籍、论坛、博客等。。。)整理...
- QT基础学习之路
- QT 文件夹操作(最精简的文件遍历操作)
- Qt简单编程--小知识点
- OpenCV -- win7下配置OpenCV的Qt开发环境
- win7下配置OpenCV的Qt开发环境
- Qt 网易云api 在线播放音乐