QMap Class Reference(2)

QMap<QString, int> 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 。原因是 []() 悄悄的插入一个 item map ,如果 key 没有项目存在。例如:下面的代码将穿件 1000 个项目在内存中。
// WRONG
      
 QMap<int, QWidget *> 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<QString, int> i(map);
      
 while (i.hasNext()) {
      
     i.next();
      
     cout << i.key() << ": " << i.value() << endl;
      
 }
      
Stl 风格:
QMap<QString, int>::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 的所有的值,你能使用 values const Key &key ),他返回一个 QList<T>:
QList<int> values = map.values("plenty");
      
 for (int i = 0; i < values.size(); ++i)
      
     cout << values.at(i) << endl;
      
如果你只需要提取值从一个 map ,你能使用 foreach
QMap<QString, int> map;
      
 ...
      
 foreach (int value, map)
      
     cout << value << endl;
      
项目能被移除从 map 用很多方式。一个方式是调用 remove ();这将一个任何项目关联指定的 key 。另一个方式是使用 QMutableMapiterator :: remove ()。此外,你能清楚整个 map 使用 clear ()。
QMap key 和值数据类型必须是可分配的数据类型。这覆盖大多数你可能遇到的数据类型,但是编译器将不让你,例如,存储一个 QWidget 作为一个值;代替,存储一个 QWidget* 。此外, QMap key 类型必须提供 <() QMap 使用他来保持他的项目被存储,假定两个 keys
X y 是相等的,如果 x 既不小于 y 也不 y<x
#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
      
在这个例子中,我们开始通过比较雇员的名字。如果他们是平等的,我们比较他们的出生日期来打破平局。
 

你可能感兴趣的:(职场,Class,reference,休闲,QMap)