问题
有时候想要获得可以按顺序读写的键值对,此时QMap和QHash并不能够满足我们需求
测试代码:
QMap<int,int> map;
map.insert(7,8);
map.insert(9,5);
map.insert(8,7);
QHash<int,int> hash;
hash.insert(7,8);
hash.insert(9,5);
hash.insert(8,7);
cout << "QMap<>:" << endl;
cout << map.keys().at(0) <<"," << map.values().at(0) << endl
<< map.keys().at(1) <<"," << map.values().at(1) << endl
<< map.keys().at(2) <<"," << map.values().at(2) << endl;
cout << "QHash<>:" << endl;
cout << hash.keys().at(0) <<"," << hash.values().at(0) << endl
<< hash.keys().at(1) <<"," << hash.values().at(1) << endl
<< hash.keys().at(2) <<"," << hash.values().at(2) << endl;
多次输出:
QMap<>:
7,8
8,7
9,5
QHash<>:
9,5
7,8
8,7
QMap<>:
7,8
8,7
9,5
QHash<>:
8,7
7,8
9,5
QMap<>:
7,8
8,7
9,5
QHash<>:
8,7
9,5
7,8
可以看到
QMap 按任意顺序插入QMap,重复实验,Qmap都会根据Key自动排序
QHash 按任意顺序插入QHash,重复实验,QHash随机顺序
解决办法
采用用QPair,并与QList或者QVector嵌套
QList<QPair<T,T>>
QVector<QPair<T,T>>
测试代码:
QList<QPair<int,int>> listPair;
listPair.append(make_pair(7,8));
listPair.append(make_pair(9,5));
listPair.append(make_pair(8,7));
QVector<QPair<int,int>> vecPair;
vecPair.append(make_pair(7,8));
vecPair.append(make_pair(9,5));
vecPair.append(make_pair(8,7));
cout << "QList<QPair<>>:" << endl;
cout << listPair.at(0).first <<"," << listPair.at(0).second << endl
<< listPair.at(1).first <<"," << listPair.at(1).second << endl
<< listPair.at(2).first <<"," << listPair.at(2).second << endl;
cout << "QVector<QPair<>>:" << endl;
cout << vecPair.at(0).first <<"," << vecPair.at(0).second << endl
<< vecPair.at(1).first <<"," << vecPair.at(1).second << endl
<< vecPair.at(2).first <<"," << vecPair.at(2).second << endl;
多次输出:
QList<QPair<>>:
7,8
9,5
8,7
QVector<QPair<>>:
7,8
9,5
8,7
QList<QPair<>>:
7,8
9,5
8,7
QVector<QPair<>>:
7,8
9,5
8,7
参考链接: