Qt QMap简单用法


QMap提供了一个从类项为key的键到类项为T的直的映射,通常所存储的数据类型是一个键对应一个直,并且按照Key的次序存储数据,这个类也支持一键多值的情况,用类QMultiMap

QHash具有和QMap几乎完全一样的APi,此类维护这一张哈希表,表的大小和数据项是自适应的,QHash是以任意的顺序住址他的数据,,当然了他也是可以支持一键多值的,QMultiHash

两种之间的区别是:

QHash查找速度上显著于QMap

QHash以任意的方式进行存储,而QMap则是以key顺序进行存储.

Qhash 的键类型必须提供operator==()和yige 全局的qHash(key)函数。而QMap的键类型key必须提供operator<()函数.

他们同样也是有两种风格的迭代容器。用来进行遍历的。

 1 ///QMap<Key,T(value)> and QHash<K,T>
 2  
 3 #include <QtCore/QCoreApplication>
 4 #include <qmap.h>
 5 #include <qdebug.h>
 6  
 7 int main(int argc, char *argv[])  8 {  9  QCoreApplication a(argc, argv); 10  
11     QMap<QString,int> map; 12     map.insert("eins o",1); 13     map.insert("sieben",7); 14     map["a test"]=23; 15     //Normally, a QMap allows only one value per key. 16     //If you call insert() with a key that already exists in the QMap, 17     //the previous value will be erased
18     map["a test"]=13; 19  
20     int val=map.value("a test"); 21     qDebug()<<val; 22  
23     int val2=map.value("error"); 24     qDebug()<<val2;    ///0
25  
26     int val3=map.value("error2",20); 27     qDebug()<<val3; 28  
29     int val4=map.value("a test",40); 30     qDebug()<<val4; 31     using a java-style iterator 32     QMapIterator<QString,int> iter(map); 33     while(iter.hasNext()) 34  { 35         iter.next();  ///放在前面
36         qDebug()<<iter.key()<<" "<<iter.value(); 37  } 38     using an Stl-style iterator 39     QMap<QString,int>::ConstIterator i=map.constBegin(); 40     while(i!=map.constEnd()) 41  { 42         qDebug()<<i.key()<<": "<<i.value(); 43         ++i; 44  } 45  
46     QMap<QString,int>::Iterator it; 47     it=map.find("sieben"); 48     if(it!=map.end()) 49         it.value()=8; 50  
51     for(QMap<QString,int>::ConstIterator ite=map.constBegin(); ite!=map.constEnd(); ++ite) 52         qDebug()<<ite.key()<<": "<<ite.value(); 53  
54     return 0;//a.exec();
55 }

 

结果: 13
0
20
13
"a test"   13
"eins o"   1
"sieben"   7
"a test" :  13
"eins o" :  1
"sieben" :  7
"a test" :  13
"eins o" :  1
"sieben" :  8 请按任意键继续. . .

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM