C++(STL):28 ---關聯式容器map用法

作為關聯式容器的一種,map 容器存儲的都是 pair 對象,也就是用 pair 類模板創建的鍵值對。其中,各個鍵值對的鍵和值可以是任意數據類型,包括 C++ 基本數據類型(int、double 等)、使用結構體或類自定義的類型。

通常情況下,map 容器中存儲的各個鍵值對都選用 string 字符串作為鍵的類型。

與此同時,在使用 map 容器存儲多個鍵值對時,該容器會自動根據各鍵值對的鍵的大小,按照既定的規則進行排序。默認情況下,map 容器選用std::less<T>排序規則(其中 T 表示鍵的數據類型),其會根據鍵的大小對所有鍵值對做升序排序。當然,根據實際情況的需要,我們可以手動指定 map 容器的排序規則,既可以選用 STL 標準庫中提供的其它排序規則(比如std::greater<T>),也可以自定義排序規則。

關于如何自定義 map 容器的排序規則,后續章節會做詳細講解。

另外需要注意的是,使用 map 容器存儲的各個鍵值對,鍵的值既不能重復也不能被修改。換句話說,map 容器中存儲的各個鍵值對不僅鍵的值獨一無二,鍵的類型也會用 const 修飾,這意味著只要鍵值對被存儲到 map 容器中,其鍵的值將不能再做任何修改。

前面提到,map 容器存儲的都是 pair 類型的鍵值對元素,更確切的說,該容器存儲的都是 pair<const K, T> 類型(其中 K 和 T 分別

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/444355.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/444355.shtml
英文地址,請注明出處:http://en.pswp.cn/news/444355.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C++(STL):26 ---關聯式容器set用法

set容器都會自行根據鍵的大小對存儲的鍵值對進行排序, 只不過 set 容器中各鍵值對的鍵 key 和值 value 是相等的,根據 key 排序,也就等價為根據 value 排序。 另外,使用 set 容器存儲的各個元素的值必須各不相同。更重要的是,從語法上講 set 容器并沒有強制對存儲元素的類…

leetcode387. 字符串中的第一個唯一字符

給定一個字符串&#xff0c;找到它的第一個不重復的字符&#xff0c;并返回它的索引。如果不存在&#xff0c;則返回 -1。 案例: s "leetcode" 返回 0. s "loveleetcode", 返回 2. 注意事項&#xff1a;您可以假定該字符串只包含小寫字母。 思路&…

C++(STL):30 ---關聯式容器map的operator[]和insert效率對比

通過前面的學習我們知道,map 容器模板類中提供有 operator[ ] 和 insert() 這 2 個成員方法,而值得一提的是,這 2 個方法具有相同的功能,它們既可以實現向 map 容器中添加新的鍵值對元素,也可以實現更新(修改)map 容器已存儲鍵值對的值。舉個例子(程序一): #include …

C++(STL):29 ---關聯式容器map 迭代器

無論是前面學習的序列式容器,還是關聯式容器,要想實現遍歷操作,就必須要用到該類型容器的迭代器。當然,map 容器也不例外。C++ STL 標準庫為 map 容器配備的是雙向迭代器(bidirectional iterator)。這意味著,map 容器迭代器只能進行 ++p、p++、--p、p--、*p 操作,并且迭…

C++(STL):35---multimap容器

在掌握 C++ STL map 容器的基礎上,本節再講一個和 map 相似的關聯式容器,即 multimap 容器。所謂“相似”,指的是 multimap 容器具有和 map 相同的特性,即 multimap 容器也用于存儲 pair<const K, T> 類型的鍵值對(其中 K 表示鍵的類型,T 表示值的類型),其中各個…

在Spring + Hibernate中使用二級緩存配置步驟

在SSH中用二級緩存大概分以下幾步&#xff1a; 1、首先在hbm文件里對涉及到的對象設置緩存方式&#xff0c;或根據情況設置自己需要的 2、在ehcache的配置文件里配置一個cache&#xff0c;name為這個類名 3、在applicationContext.xml的hibernate配置里 hibernate.cache.use_q…

C++(STL):34--- multiset容器詳解

前面章節中,對 set 容器做了詳細的講解。回憶一下,set 容器具有以下幾個特性: 不再以鍵值對的方式存儲數據,因為 set 容器專門用于存儲鍵和值相等的鍵值對,因此該容器中真正存儲的是各個鍵值對的值(value);set 容器在存儲數據時,會根據各元素值的大小對存儲的元素進行…

C++(STL):36---關聯式容器multiset、multimap源碼剖析

一、multiset multiset的特性以及用法和set完全相同,唯一的差別在于它允許鍵值重復,因此它的插入操作采用的是底層RB-tree的insert_equal()而非insert_unique() multiset源碼 //以下代碼摘錄于stl_multiset.htemplate <class _Key, class _Compare, class _Alloc>clas…

leetcode 455. 分發餅干

假設你是一位很棒的家長&#xff0c;想要給你的孩子們一些小餅干。但是&#xff0c;每個孩子最多只能給一塊餅干。對每個孩子 i &#xff0c;都有一個胃口值 gi &#xff0c;這是能讓孩子們滿足胃口的餅干的最小尺寸&#xff1b;并且每塊餅干 j &#xff0c;都有一個尺寸 sj 。…

C++(STL):33---hash_set、hash_map、hash_multiset、hash_multimap源碼剖析

這些關聯容器底層都是使用hash table實現的.一、hash_set 由于hash_set底層是以hash table實現的,因此hash_set只是簡單的調用hash table的方法即可與set的異同點:hash_set與set都是用來快速查找元素的但是set會對元素自動排序,而hash_set沒有hash_set和set的使用方法相同在…

leetcode402. 移掉K位數字

給定一個以字符串表示的非負整數 num&#xff0c;移除這個數中的 k 位數字&#xff0c;使得剩下的數字最小。 注意: num 的長度小于 10002 且 ≥ k。 num 不會包含任何前導零。 示例 1 : 輸入: num "1432219", k 3 輸出: "1219" 解釋: 移除掉三個數字…

C++:43---派生類向基類轉換、靜態/動態的類變量

一、繼承中類的類型轉換規則 我們普通的編程規則規定,如果我們想把引用或指針綁定到一個對象上,則引用或指針的類型必須與所綁定的對象的類型一致或者對象的類型含有一種可接受的const類型轉換規則。但是繼承關系中的類比較例外,其規則如下:①我們可以將基類的指針或引用綁…

C++:42---類的內存大小

一、類內存的特點 類內無任何成員變量時,默認為1字節類內成員遵循內存的對齊補齊規則(與結構體的對齊補齊一樣)函數不占內存(存在代碼段)有繼承關系時,父類的成員變量也屬于類內寸的一部分,但是C++標準并沒有明確規定派生類的對象在內存中如何分布(也就是說基類部分和派…

C++:40---繼承中類成員的變化關系

一、派生類繼承基類成員的規則 ①派生類繼承了基類的所有數據成員與函數(不論公有成員、保護成員、私有成員)②派生類雖然繼承了基類的所有成員,但是能不能訪問基類的成員還與父類成員的屬性(public、protected、private)以及繼承方式有關③類靜態成員:如果基類定義了一個靜…

C++:37---繼承概念、繼承種類

這篇文章不詳細分析繼承和不同繼承關系下的特點。 我將在后邊幾篇文章里專門針對繼承關系來做分析。 一、基類與派生類的概念 基類(父類):在繼承關系中處于上層的類派生類(子類):在繼承關系中處于下層的類class A;class B;class C:public A //C為A的子類,A為C的父類{};…

C++:41---覆蓋和隱藏

覆蓋(重寫) 概念: 基類的虛函數,如果派生類有相同的函數,則子類的方法覆蓋了父類的方法 隱藏 概念: 當子類定義出的“成員變量、方法”與父類的重名時,父類的會被隱藏重點:對于函數,基類定義了一些列的重載函數,在派生類中只要有一個同名的函數(即使參數列表不…

leetcode179. 最大數

給定一組非負整數&#xff0c;重新排列它們的順序使之組成一個最大的整數。 示例 1: 輸入: [10,2] 輸出: 210 示例 2: 輸入: [3,30,34,5,9] 輸出: 9534330 說明: 輸出結果可能非常大&#xff0c;所以你需要返回一個字符串而不是整數。 思路&#xff1a;貪心&#xff0c;對于…

C++:39---繼承中構造函數、析構函數的關系

一、繼承中構造函數的關系 如果父類沒有構造函數,則子類初始化時不需要構造父類如果父類有構造函數,則子類初始化自己的構造函數時,要先初始化父類的構造函數基類的構造函數必須在派生類的構造函數初始化列表來進行初始化總結:在構造自己(子類)之前,需要先構造父類演示案…

Java應用服務器Tomcat

Tomcat 是一個小型的輕量級應用服務器&#xff0c;在中小型系統和并發訪問用戶不是很多的場合下被普遍使用&#xff0c;是開發和調試JSP 程序的首選。對于一個初學者來說&#xff0c;可以這樣認為&#xff0c;當在一臺機器上配置好Apache 服務器&#xff0c;可利用它響應對HTML…

C++:38---final關鍵字和禁止類繼承

一、final關鍵字 C++新標準規定:如果我們定義的類不希望被其他類繼承,那么可以在類名后加一個final關鍵字但是final類仍然可以繼承其他類。實際上C++11的關鍵字final有兩個用途。第一,它阻止了從類繼承;第二,阻止一個虛函數的重載。二、演示案例 class A final{}; class B…