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的使用方法相同

  • 在介紹hash table的hash functions的時候說過,hash table有一些無法處理的類型(除非用戶自己書寫hash function)。因此hash_set也無法自己處理

hash_set源碼

//以下代碼摘錄于stl_hash_set.htemplate <class _Value, class _HashFcn, class _EqualKey, class _Alloc>class hash_set{// requirements:__STL_CLASS_REQUIRES(_Value, _Assignable);__STL_CLASS_UNARY_FUNCTION_CHECK(_HashFcn, size_t, _Value);__STL_CLASS_BINARY_FUNCTION_CHECK(_EqualKey, bool, _Value, _Value);private://indentity<>定義于<stl_function.h>中typedef hashtable<_Value, _Value, _HashFcn, _Identity<_Val

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

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

相關文章

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…

C++:48---純虛函數

一、純虛函數 純虛函數一種特殊的虛函數,在許多情況下在基類中不對虛函數做出有意義的實現,而是把它定義為純虛函數,它的實現由派生類實現格式:virtual 返回類型 函數名(參數列表)=0;注意事項 純虛函數不能實現,沒有函數體,其實現由子類去實現各自的功能版本純虛函數可以…

leetcode389. 找不同

給定兩個字符串 s 和 t&#xff0c;它們只包含小寫字母。 字符串 t 由字符串 s 隨機重排&#xff0c;然后在隨機位置添加一個字母。 請找出在 t 中被添加的字母。 示例: 輸入&#xff1a; s "abcd" t "abcde" 輸出&#xff1a; e 解釋&#xff1a; …

C++:47---絕不重新定義繼承而來的缺省參數值

一、靜態類型、動態類型 靜態類型:在被聲明時所采用的的類型動態類型:目前所知對象的類型演示案例 下面是一個繼承體系class Shape {public:enum ShapeColor { Red, Green, Blue };virtual void draw(ShapeColor color = Red)const = 0;};class Rectangle :public Shape {pub…

C++:44---關鍵字virtual、override、final

一、虛函數 概念:在函數前面加virtual,就是虛函數虛函數的一些概念: 只有成員函數才可定義為虛函數,友元/全局/static/構造函數都不可以虛函數需要在函數名前加上關鍵字virtual成員函數如果不是虛函數,其解析過程發生在編譯時而非運行時派生類可以不覆蓋(重寫)它繼承的虛…

leetcode409. 最長回文串

給定一個包含大寫字母和小寫字母的字符串&#xff0c;找到通過這些字母構造成的最長的回文串。 在構造過程中&#xff0c;請注意區分大小寫。比如 "Aa" 不能當做一個回文字符串。 注意: 假設字符串的長度不會超過 1010。 示例 1: 輸入: "abccccdd" 輸…

C++:46---絕不重新定義繼承而來的non-virtual函數

一、看一個隱藏non-virtual函數的例子 假設class D以public的方式繼承于class B,代碼如下:class B {public:void mf();};class D :public B {};int main(){D x;B *pB = &x;pB->mf(); //調用B::mf()D *pD = &x;pD->mf(); //調用D::mf()return 0;}二、靜態綁…

C++:45---多態

一、多態介紹 面向對象的核心思想是多態性,其含義是“多種形式”概念:在子類覆蓋了父類函數的情況下,用父類的指針(或引用)調用子類對象,或者通過父類指針調用覆蓋函數的時候(動態綁定),實際上調用的是子類的覆蓋版本,這種現象叫做多態注意事項:只有用父類的指針(或引用…

leetcode415. 字符串相加

給定兩個字符串形式的非負整數 num1 和num2 &#xff0c;計算它們的和。 注意&#xff1a; num1 和num2 的長度都小于 5100. num1 和num2 都只包含數字 0-9. num1 和num2 都不包含任何前導零。 你不能使用任何內建 BigInteger 庫&#xff0c; 也不能直接將輸入的字符串轉換為…

C++:53---菱形繼承、虛繼承

一、菱形繼承 在介紹虛繼承之前介紹一下菱形繼承概念:A作為基類,B和C都繼承與A。最后一個類D又繼承于B和C,這樣形式的繼承稱為菱形繼承菱形繼承的缺點:數據冗余:在D中會保存兩份A的內容訪問不明確(二義性):因為D不知道是以B為中介去訪問A還是以C為中介去訪問A,因此在訪…

C++:49---繼承中的友元

一、友元在繼承中的關系我們在友元的文章中介紹過&#xff0c;友元關系不能繼承。&#xff08;1&#xff09;友元關系不存在傳遞性&#xff0c;即每個類負責控制自己的友元類或者友元函數&#xff1b;&#xff08;2&#xff09;友元關系是單向的&#xff0c;不具有交換性。若類…