您的位置:首页 > 编程语言 > Qt开发

The QT container: QMap, QHash, QList

2016-05-17 22:26 627 查看
今天就搞一搞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"


达到目的,完美!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: