map/multimap用法详解
標準模板庫多重映射類用于存儲和檢索集合中的數據,此集合中的每個元素均為包含數據值和排序鍵的元素對。?鍵值不需要唯一,用于自動排序數據。?可以直接更改多重映射中的元素值,但不能直接更改其關聯鍵值。?必須先刪除與舊元素關聯的鍵值,才能插入與新元素關聯的新鍵值。
語法 template <class Key, class Type, class Traits=less<Key>, class Allocator=allocator<pair <const Key, Type> > > class multimap; 參數 Key要存儲在多重映射中的鍵數據類型。
要存儲在多重映射中的元素數據類型。
一種提供函數對象的類型,該函數對象可將兩個元素值作為排序鍵進行比較,以確定其在多重映射中的相對順序。?默認值是二元謂詞?less<Key>。
在 C++ 14 中可以通過指定沒有類型參數的?std::less<>?或?std::greater<>?謂詞來啟用異類查找。?有關詳細信息,請參閱8e915ca1-19ba-4f0d-93c8-e2c3bfd638eb#sequence_containers
一種表示存儲的分配器對象的類型,該分配器對象封裝有關映射的內存分配和解除分配的詳細信息。?此參數為可選參數,默認值為?allocator<pair <const Key, Type> >。
STL 多重映射類是:
-
大小可變的關聯容器,支持基于關聯鍵值高效檢索元素值。
-
可逆,因為它提供雙向迭代器來訪問其元素。
-
有序,因為它的元素在容器中根據指定的比較函數按鍵值排序。
-
多個,它的元素不需要具有唯一鍵,因此一個鍵值可具有多個相關聯的元素數據值。
-
關聯容器對,因為它的元素數據值與其鍵值不同。
-
模板類,因為它提供的功能是一般性的功能,因此與作為元素或鍵包含的特定數據類型無關。?用于元素和鍵的數據類型作為類模板以及比較函數和分配器中的參數指定。
映射類提供的迭代器是雙向迭代器,但類成員函數?insert?和?multimap?具有將較弱輸入迭代器作為模板參數的版本,較弱輸入迭代器的功能要求比雙向迭代器類保證的功能要求更少。?不同的迭代器概念形成一個系列,通過它們的功能優化相關聯。?每個迭代器概念有它自己的一套要求,使用這些概念的算法必須根據迭代器類型提供的要求限制它們的假設。?可以假定輸入迭代器可取消引用以引用某個對象,并可遞增到序列中的下一迭代器。?這是最小的功能集,但足以按有意義的方式提供類成員函數的上下文中的迭代器范圍?[First, Last)。
容器類型選擇通常應根據應用程序所需的搜索和插入的類型。?關聯容器針對查找、插入和移除操作進行了優化。?顯式支持這些操作的成員函數較為高效,執行這些操作的時間與容器中元素數量的對數平均成比例。?插入元素不會使迭代器失效,移除元素僅會使專門指向已移除元素的迭代器失效。
當應用程序滿足將值與其鍵關聯的條件時,應選擇多重映射作為關聯容器。?此類結構的模型是關鍵字排序列表,這些關鍵字具有提供定義等的關聯字符串值,并且并非始終唯一定義。?如果關鍵字經過唯一定義以使鍵唯一,則應選擇映射作為容器。?另一方面,如果僅存儲關鍵字列表,則應使用集作為正確容器。?如果允許關鍵字多次出現,則應使用多重集合作為適當的容器結構。
多重映射通過調用存儲的?key_compare?類型的函數對象,對它控制的序列進行排序。?此存儲的對象是比較函數,可通過調用成員函數?key_comp?訪問。?通常,元素僅需小于比較元素即可建立此順序;因此,給定任意兩個元素,可以確定這兩個元素等效(即兩者均不小于對方)或其中一個小于另一個。?這將導致在非等效元素之間進行排序。?在技術性更強的說明中,比較函數是一個二元謂詞,在標準數學的意義上引發嚴格弱排序。?二元謂詞?f(x,y)?是包含兩個參數對象(x?和y)以及一個返回值(true 或 false)的函數對象。?如果二元謂詞具有自反性、反對稱性和傳遞性且等效可傳遞,對集進行的排序將為嚴格弱排序,其中兩個對象x?和?y?定義為在?f(x,y)?和?f(y,x)?均為 false 時等效。?如果鍵之間的更強相等條件取代了等效性,則排序將為總排序(即所有元素彼此排序),并且匹配的鍵將難以彼此辨別。
在 C++ 14 中可以通過指定沒有類型參數的?std::less<>?或?std::greater<>?謂詞來啟用異類查找。?有關詳細信息,請參閱8e915ca1-19ba-4f0d-93c8-e2c3bfd638eb#sequence_containers
成員 構造函數| multimap | 構造一個空的或者是其他某個?multimap?的全部或部分副本的?multimap。 |
| allocator_type | 一種類型,此類型表示?allocator?對象的?multimap?類。 |
| const_iterator | 一種類型,此類型提供可讀取?const?中的?multimap?元素的雙向迭代器。 |
| const_pointer | 一種類型,此類型提供指向?const?中的?multimap?元素的指針。 |
| const_reference | 一種類型,此類型提供對存儲在?const?中的?multimap?元素的引用(用于讀取和執行?const?操作)。 |
| const_reverse_iterator | 一種類型,此類型提供可讀取?const?中的任何?multimap?元素的雙向迭代器。 |
| difference_type | 一種有符號整數類型,此類型可用于表示?multimap?中迭代器指向的元素間范圍內的元素數量。 |
| iterator | 一種類型,此類型提供引用同一?multimap?中的元素的兩個迭代器之間的差異。 |
| key_compare | 一種提供函數對象的類型,該函數對象可比較兩個排序鍵以確定?multimap?中兩個元素的相對順序。 |
| key_type | 一種類型,此類型描述組成?multimap?中每個元素的排序鍵對象。 |
| mapped_type | 一種類型,此類型表示存儲在?multimap?中的數據類型。 |
| 指針 | 一種類型,此類型提供指向?const?中的?multimap?元素的指針。 |
| 引用 | 一種類型,此類型提供對存儲在?multimap?中的元素的引用。 |
| reverse_iterator | 一種類型,此類型提供可讀取或修改反向?multimap?中的元素的雙向迭代器。 |
| size_type | 一種無符號整數類型,此類型提供指向?const?中multimap?元素的指針。 |
| value_type | 一種提供函數對象的類型,該函數對象可將兩個元素作為排序鍵比較以確定它們在?multimap?中的相對順序。 |
| begin | 返回一個迭代器,此迭代器用于發現?multimap?中的第一個元素。 |
| cbegin | 返回一個常量迭代器,此迭代器用于發現?multimap?中的第一個元素。 |
| cend | 返回一個常量迭代器,此迭代器用于發現?multimap?中最后一個元素之后的位置。 |
| 清除 | 清除?multimap?的所有元素。 |
| count | 返回?multimap?中其鍵與指定為參數的鍵匹配的元素數量。 |
| crbegin | 返回一個常量迭代器,此迭代器用于發現反向?multimap?中的第一個元素。 |
| crend | 返回一個常量迭代器,此迭代器用于發現反向?multimap?中最后一個元素之后的位置。 |
| emplace | 將就地構造的元素插入到?multimap。 |
| emplace_hint | 將就地構造的元素插入到?multimap,附帶位置提示 |
| 空 | 測試?multimap?是否為空。 |
| end | 返回一個迭代器,此迭代器用于發現?multimap?中最后一個元素之后的位置。 |
| equal_range | 查找其中元素的鍵與指定值匹配的元素范圍。 |
| erase | 從?multimap?中的指定位置移除一個元素或元素范圍,或者移除與指定鍵匹配的元素。 |
| find | 返回一個迭代器,此迭代器用于發現?multimap?中其鍵與指定鍵等效的元素的第一個位置。 |
| get_allocator | 返回用于構造?allocator?的?multimap?對象的副本。 |
| 插入 | 將一個元素或元素范圍插入到?multimap。 |
| key_comp | 檢索用于對?multimap?中的鍵進行排序的比較對象副本。 |
| lower_bound | 返回一個迭代器,此迭代器指向?multimap?中其鍵等于或大于指定鍵的第一個元素。 |
| max_size | 返回?multimap?的最大長度。 |
| rbegin | 返回一個迭代器,此迭代器用于發現反向?multimap?中的第一個元素。 |
| rend | 返回一個迭代器,此迭代器用于發現反向?multimap?中最后一個元素之后的位置。 |
| size | 返回?multimap?中的元素數量。 |
| swap | 交換兩個?multimap?的元素。 |
| upper_bound | 返回一個迭代器,此迭代器指向?multimap?中其鍵大于指定鍵的第一個元素。 |
| value_comp | 此成員函數返回一個函數對象,該函數對象可通過比較?multimap?中元素的鍵值來確定元素順序。 |
| operator = | 將一個?multimap?中的元素替換為另一?multimap?副本。 |
要求
標頭:<map>
命名空間:?std
(key,?value) 對作為?pair?類型的對象存儲在多重映射中。?此對類需要標頭 <utility>,<map> 自動包括此標頭。
總結
以上是生活随笔為你收集整理的map/multimap用法详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++编程常见问题—error: pas
- 下一篇: STL:list用法详解