16.QT-QMap和QHash解析


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區別

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM