QMap map;
       
       
map["one"] = 1;
       
 map["three"] = 3;
       
 map["seven"] = 7;
       
map.insert("twelve", 12);
       
int num1 = map["thirteen"];
       
 int num2 = map.value("thirteen");
       
 
int timeout = 30;
       
 if (map.contains("TIMEOUT"))
       
     timeout = map.value("TIMEOUT");
       
重载函数value()使用他的第二个参数作为缺省值,如果没有项目关于特别的key
int timeout = map.value("TIMEOUT", 30);
       
一般,我们推荐使用contains()和value(),而不使用[]()来查找一个key。原因是[]()悄悄的插入一个itemmap,如果key没有项目存在。例如:下面的代码将穿件1000个项目在内存中。
// WRONG
       
 QMap map;
       
 ...
       
 for (int i = 0; i < 1000; ++i) {
       
     if (map[i] == okButton)
       
         cout << "Found button at index " << i << endl;
       
 }
       
为了避免这个问题,取代map[i]使用map.value(i).
如果你想通过所有的(key,value)成对的存储在QMap中,你能使用一个迭代器。QMap提供java风格的迭代器。
QMapIterator i(map);
       
 while (i.hasNext()) {
       
     i.next();
       
     cout << i.key() << ": " << i.value() << endl;
       
 }
       
Stl风格:
QMap::const_iterator i = map.constBegin();
       
 while (i != map.constEnd()) {
       
     cout << i.key() << ": " << i.value() << endl;
       
     ++i;
       
 }
       
项目被横穿在key的升序。
正常地,一个QMap允许每个key只有一个值。如果你调用insert(),而key已经存在于QMap中,前一个值将被擦出。例如:
map.insert("plenty", 100);
       
 map.insert("plenty", 2000);
       
 // map.value("plenty") == 2000
       
尽管如此,你能存储每一个key多个值通过使用insertMulti()代替insert()(或者使用方便的子类QMultiMap.如果想检索一个key的所有的值,你能使用valuesconst Key &key),他返回一个QList:
QList values = map.values("plenty");
       
 for (int i = 0; i < values.size(); ++i)
       
     cout << values.at(i) << endl;
       
如果你只需要提取值从一个map,你能使用foreach
QMap map;
       
 ...
       
 foreach (int value, map)
       
     cout << value << endl;
       
项目能被移除从map用很多方式。一个方式是调用remove();这将一个任何项目关联指定的key。另一个方式是使用QMutableMapiterator::remove()。此外,你能清楚整个map使用clear()。
QMapkey和值数据类型必须是可分配的数据类型。这覆盖大多数你可能遇到的数据类型,但是编译器将不让你,例如,存储一个QWidget作为一个值;代替,存储一个QWidget*。此外,QMapkey类型必须提供<()QMap使用他来保持他的项目被存储,假定两个keys
Xy是相等的,如果x既不小于y也不y
#ifndef EMPLOYEE_H
       
 #define EMPLOYEE_H
       

     
       
     
 class Employee
       
 {
       
 public:
       
     Employee() {}
       
     Employee(const QString &name, const QDate &dateOfBirth);
       
     ...
       

     
       
     
 private:
       
     QString myName;
       
     QDate myDateOfBirth;
       
 };
       

     
       
     
 inline bool operator<(const Employee &e1, const Employee &e2)
       
 {
       
     if (e1.name() != e2.name())
       
         return e1.name() < e2.name();
       
     return e1.dateOfBirth() < e2.dateOfBirth();
       
 }
       

     
       
     
 #endif // EMPLOYEE_H
       
在这个例子中,我们开始通过比较雇员的名字。如果他们是平等的,我们比较他们的出生日期来打破平局。