The QT container: QMap, QHash, QList

今天就搞一搞QT中的容器。

首先,我不是分享每个容器是怎样工作的,只是分享一下在实际开发过程中遇到的问题。

场景:
从服务器拿到了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"

达到目的,完美!

你可能感兴趣的:(qt,QLIst,QHash,QMap)