QMap
- QMap原型為class QMap <K,T>,其中K表示鍵,T表示值,K和T屬於映射關系.
- QMap會根據K來自動進行升序鍵排序
- QMap中的K類型必須重載operator <
QMap常用函數如下:
const Key QMap::key ( const T & value ); //通過值來找鍵,若未找到則返回0,由於只對K鍵進行排序,所以該函數不是快速查找 const T QMap::value ( const Key & key ); //通過鍵來查找值, 若未找到則返回0,由於K鍵已進行排序,所以屬於快速查找
QMap示例:
QMap<QString, int> map; //定義鍵為QString型,值為int型 map["key 1"] = 3; map["key 1"] = 1; //更新key 1的值 map["key 4"] = 4; map["key 2"] = 2; map.insert("key 3", 3); //等價於: map["key 3"] = 3; QList<QString> list = map.keys(); for(int i=0;i<list.length();i++) { qDebug()<< list[i]<<","<< map.value(list[i]) ; }
打印:
"key 1" , 1 "key 2" , 2 "key 3" , 3 "key 4" , 4
也可以使用QMapIterator迭代器來遍歷整個QMap
QMapIterator常用函數如下:
void toFront (); //使迭代器的游標指向容器的頭部 void toBack (); //使迭代器的游標指向容器的尾部 Item next (); //返回map中的下一項,並使迭代器的游標指向下一項 Item previous (); //返回map中的上一項,並使迭代器的游標指向上一項 bool hasNext (); //若迭代器的游標指向的map還有下一項,則返回true,,若為空則返回false bool hasPrevious (); //若迭代器的游標指向的map還有上一項,則返回true,,若為空則返回false const Key & key (); //返回上一項的鍵(key)和數值(value); const T& value(); //返回上一項的數值(value);
示例:
QMap<QString, int> map; map["key 1"] = 3; map["key 1"] = 1; //key 1將會覆蓋之前的key 1 map["key 4"] = 4; map["key 2"] = 2; map.insert("key 3", 3); QMapIterator<QString, int> it(map); while(it.hasNext()) { it.next(); qDebug()<<it.key()<<","<<it.value(); }
在QMap類里也封裝了一個 const_iterator 迭代類,也可以通過它來遍歷整個QMap
示例如下:
QMap<QString, int> map; map["key 1"] = 3; map["key 1"] = 1; //key 1將會覆蓋之前的key 1 map["key 4"] = 4; map["key 2"] = 2; map.insert("key 3", 3); QMap<QString, int>::const_iterator it; for(it = map.begin();it!=map.end();it++) { qDebug()<< it.key()<<","<<it.value(); }
QHash
- QHash原型為class QHash<K,T>,其中K表示鍵,T表示值,K和T屬於映射關系.
- 和QMap不同的是,QHash中的鍵值對不會進行自動排序,而是更據Hash值存儲
- QHash中的Key類型必須重載operator ==
- QHash中的Key對象必須重載全局哈希函數qHash()
- 由於QHash通過Hash表存儲,所以查找比QMap快
QHash常用函數和QMap類似,示例如下:
QHash<QString, int> hash; hash["key 1"] = 3; hash["key 1"] = 1; //key 1將會覆蓋之前的key 1 hash["key 4"] = 4; hash["key 2"] = 2; hash.insert("key 3", 3); QList<QString> list = hash.keys(); for(int i=0;i<list.length();i++) qDebug()<<list[i]<<","<<hash.value(list[i]);
運行打印:
"key 1" , 1 "key 2" , 2 "key 3" , 3 "key 4" , 4
QHash的迭代器QHashIterator類用法,和QMap的使用方法一樣.
QHash內部也封裝了一個 const_iterator 迭代類,和QMap的使用方法也一樣,比如:
QHash<QString, int> hash; hash["key 1"] = 3; hash["key 1"] = 1; //key 1將會覆蓋之前的key 1 hash["key 4"] = 4; hash["key 2"] = 2; hash.insert("key 3", 3); QHash<QString, int> ::const_iterator it; for(it=hash.begin();it!=hash.end();it++) qDebug()<<it.key()<<","<<it.value();
QMap和QHash區別