Qt:QHash和QMap区别
Qt,QHash,QMap,区别2016-07-28
QMap提供了一个从类项为key的键到类项为T的直的映射,通常所存储的数据类型是一个键对应一个值,并且按照Key的次序存储数据。同时这个类也支持一键多值的情况,用类QMultiMap可以实现。
QHash具有和QMap几乎完全一样的APi,此类维护这一张哈希表,表的大小和数据项是自适应的,QHash是以任意的顺序住址他的数据,当然了他也是可以支持一键多值的,用类QMultiHash可以实现。
所以如果索引要得到排序的遍历结果时,应当使用QMap类。
#include <QCoreApplication> #include <QHash> #include <QMap> #include <QDebug> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); QHash<int, QString> data0; data0.insert(1, "aaa"); data0.insert(2, "bbb"); data0.insert(3, "ccc"); for(auto it = std::begin(data0); it != std::end(data0); ++it) qDebug() << it.value(); QHashIterator<int,QString>iter0(data0); while(iter0.hasNext()) { iter0.next(); qDebug()<<iter0.key(); qDebug()<<iter0.value(); } qDebug()<<"********************************"; QMap<int, QString> data1; data1.insert(1, "aaa"); data1.insert(2, "bbb"); data1.insert(3, "ccc"); for(auto it = std::begin(data1); it != std::end(data1); ++it) qDebug() << it.value(); QMapIterator<int,QString>iter1(data1); while(iter1.hasNext()) { iter1.next(); qDebug()<<iter1.key(); qDebug()<<iter1.value(); } return a.exec(); }
运行结果: