C語言中文網 目錄
首頁 > STL > map容器 閱讀:2,445

C++ map容器(STL map容器)

序列容器是管理數據的寶貴工具,但對大多數應用程序而言,序列容器不提供方便的數據訪問機制。舉個簡單的示例,當我們用它處理姓名和地址時,在這種場景下,序列容器可能并不能如我們所愿。一種典型的方法是通過名稱來尋找地址。如果記錄保存在序列容器中,就只能通過搜索得到這些數據。相比而言,map 容器提供了一種更有效的存儲和訪問數據的方法。

map 容器是關聯容器的一種。在關聯容器中,對象的位置取決于和它關聯的鍵的值。鍵可以是基本類型,也可以是類類型。字符串經常被用來作為鍵,如果想要保存姓名和地址的記錄,就可以這么使用。名稱通??赡苁且粋€或多個字符串。關聯容器中的對象位置的確定取決于容器中的鍵的類型,而且對于特定容器類型的內部組織方式,不同的 STL 有不同的實現。

map 容器有 4 種,每一種都是由類模板定義的。所有類型的 map 容器保存的都是鍵值對類型的元素。map 容器的元素是 pair<const K,T> 類型的對象,這種對象封裝了一個 T 類型的對象和一個與其關聯的 K 類型的鍵。pair 元素中的鍵是 const,因為修改鍵會擾亂容器中元素的順序。每種 map 容器的模板都有不同的特性:
  1. map<K,T>容器,保存的是 pair<const K,T> 類型的元素。pair<const K,T> 封裝了一對鍵對象,鍵的類型是 K,對象的類型是 T。每個鍵都是唯一的,所以不允許有重復的鍵;但可以保存重復的對象,只要它們的鍵不同。map 容器中的元素都是有序的,元素在容器內的順序是通過比較鍵確定的。默認使用 less<K> 對象比較。
  2. multimap<K,T> 容器和 map<K,T> 容器類似,也會對元素排序。它的鍵必須是可比較的,元素的順序是通過比較鍵確定的。和 map<K,T> 不同的是,multimap<K,T> 允許使用重復的鍵。因此,一個 multimap 容器可以保存多個具有相同鍵值的 <const K,T> 元素。
  3. unordered_map<K,T> 中 pair< const K,T>元素的順序并不是直接由鍵值確定的,而是由鍵值的哈希值決定的。哈希值是由一個叫作哈希的過程生成的整數,本章后面會解釋這一點。unordered_map<K,T>不允許有重復的鍵。
  4. unordered_multimap<K,T> 也可以通過鍵值生成的哈希值來確定對象的位置,但它允許有重復的鍵。

map 和 mutilmap 容器的模板定義在 map 頭文件中,unordered_map 和 unordered_multimap 容器的模板定義在 unordered_map 頭文件中??梢酝ㄟ^ map 模板類型名的前綴來識別容器的特性。
  • multi前綴表明鍵不必唯一,但如果沒有這個前綴,鍵必須唯一。
  • unordered_prefix 前綴表明容器中元素的位置是通過其鍵值所產生的哈希值來決定的,而不是通過比較鍵值決定的。如果沒有該前綴,那么元素的位置就由比較鍵值決定。

接下來讓我們先學習 map 容器。
本章內容:
1. C++ map是什么
2. C++ map的創建(STL map的創建)詳解
3. C++ map插入數據(STL map插入數據)詳解
4. C++ map(STL map)構造元素(emplace和emplace_hint函數)詳解
5. C++ map獲?。ㄔL問)元素詳解
6. C++ map(STL map)刪除元素(erase函數刪除元素)詳解
7. C++ pair(STL pair)類模板的用法詳解
8. C++ tuple(STL tuple)模板用法詳解
9. C++ multimap(STL multimap)的使用詳解
10. C++ 自定義比較函數(map和multimap)詳解
11. C++ hash(STL hash)及其函數模板用法詳解
12. C++ unordered_map及其基本結構和特性
13. C++ unordered_map初始化詳解
14. C++ unordered_map插入元素(insert插入元素)詳解
15. C++ unordered_map獲?。ㄔL問)元素詳解
16. C++ unordered_map刪除元素(erase刪除元素)詳解
17. C++ unordered_multimap用法詳解

精美而實用的網站,提供C語言、C++、STL、Linux、Shell、Java、Go語言等教程,以及socket、GCC、vi、Swing、設計模式、JSP等專題。

Copyright ?2011-2018 biancheng.net, 陜ICP備15000209號

底部Logo
极速pk10开户