日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

关于QMap的几点总结思考

發布時間:2025/3/15 编程问答 56 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于QMap的几点总结思考 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

關于QMap的幾點總結思考

題記:
前段時間集中精力寫了數據的分揀算法,用到了容器QMapQMultiMap。回頭再來回去該算法的時候,又覺得當時好像不是自己寫的一樣,于是有必要將QMap類來總結一下。

首先來了解下C++中STL中的map:

map是STL的一個關聯容器,它提供一對一的hash。
特點:

  • 第一個可以稱為關鍵字(key),每個關鍵字只能在map中出現一次;
  • 第二個可能稱為該關鍵字的值(value);

map以模板(泛型)方式實現,可以存儲任意類型的數據,包括使用者自定義的數據類型。

Map主要用于資料一對一映射(one-to-one)的情況,map內部的實現自建一顆紅黑樹,這顆樹具有對數據自動排序的功能。

在map內部所有的數據都是有序的,后邊我們會見識到有序的好處。比如一個班級中,每個學生的學號跟他的姓名就存在著一對一映射的關系。


Qt 中的QMap 和c++中的map 功能等同,但用法稍有不同罷了。

QMap 的功能:
自動建立key - value的對應。key 和 value可以是任意你需要的類型,包括自定義類型。

在QMap中的自定義數據類型需要重載運算符 <

QMap 的使用:
QMap對象是模板類,需要關鍵字和存儲對象兩個模板參數:
QMap<int, string> personnel;
這樣就定義了一個用int作為索引,并擁有相關聯的指向string的指針.

既然QMap是一個有序的容器。對此容器的操作無非就是增刪改查

1、插入:

//定義一個mapStudent的map數據對象 QMap<int, string> mapStudent; //insert 方式插入 mapStudent.insert(000,"student_one"); //數組“array”方式輸入 mapStudent[001] = "student_two";

這里有兩種方式來插入:1、操作符 [] 2、insert 方式

注意:不管那種方式,如果前后插入的鍵值相同,那么后一個插入的數據會覆蓋前一個數據。

2、查找:

查找的方式有三總:1、操作符[] 2、contains() 3、value()
但是,我們推薦使用后兩種,因為"操作符[]" 會在找不到鍵的情況下 ,默認會插入數據。例如下面的代碼中,會創建1000 項目。

// WRONG
QMap<int, QWidget *> map;

for (int i = 0; i < 1000; ++i) {
if (map[i] == okButton)
cout << "Found button at index " << i << endl;
}

運用 contains():

int timeout = 30;
if (map.contains(“TIMEOUT”))
timeout = map.value(“TIMEOUT”);

使用value()

int timeout = map.value(“TIMEOUT”, 30);

上面兩端代碼是等價的。當找不到鍵“TIMEOUT”,將timeout變量的值賦值為30,如果找到,那就將找到的值賦值給變量timeout。

3、遍歷

Java 風格:使用QMapIterator

QMapIterator<QString, int> i(map);
while (i.hasNext()) {
i.next();
cout << i.key() << ": " << i.value() << endl;
}

STL 風格:使用 iterator

QMap<QString, int>::const_iterator i = map.constBegin();
while (i != map.constEnd()) {
cout << i.key() << ": " << i.value() << endl;
++i;
}

如果你需要將QMap中的所有的值遍歷出來,而不需要鍵也遍歷出來,可以這樣寫:

QMap<QString, int> map;

foreach (int value, map)
cout << value << endl;

4、刪除

1、remove(): 移除你想要給定的鍵的任何一項
2、clear() 清空對象
3、take(),移除你想要給定的鍵的任何一項,,并返回該鍵下對應的值。

5、其他操作:

1、count(const Key &key) 返回該鍵下的數據項有幾項。

2、empty() 等同于 isempty() 容器是否為空

3、keys() 返回所有鍵的列表

4、size() 返回鍵值對的數量

5、 swap(QMap<Key, T> &other) 與另一個容器map 交換

6、 take(const Key &key) 刪除該鍵下的鍵值對,并返回改建所對應的值

6、unite(const QMap<Key, T> &other) 將另一個map中的鍵值對插入到本map中。

7、QList QMap::values() const 返回值列表

8、lower_bound() 返回鍵值>=給定元素的第一個位置

9、 upper_bound() 返回鍵值>給定元素的第一個位置

總結

以上是生活随笔為你收集整理的关于QMap的几点总结思考的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。