[C++][數據結構]哈希3:unordered_map和unordered_set的模擬實現

前言

今天我們來試著用哈希封裝一下unordered_map和unordered_set這兩個容器
由于主要的哈希的模擬實現都在之前的文章中,所以本文只是對于幾個小問題進行說明

KeyOfT:取出key

因為我們傳的第二個模板參數是T,我們不知道他是key還是pair<K, V>。所以,我們要增加一個模板參數取出data中的key

給出兩種實現:MapKeyOfT和SetKeyOfT

		struct MapKeyOfT{const K& operator()(const pair<K, V>& kv){return kv.first;}};
		struct SetKeyOfT{const K& operator()(const K& key){return key;}};

Insert:插入

直接調用哈希的Insert就好了(

iterator:迭代器

迭代器的需求:

  • 解引用
  • 自增
  • 不等于

我們要把什么封裝成迭代器呢?
節點的指針?

那我們需要知道:當a桶遍歷完了,怎么找到a+1號桶呢?

給出的解決方案是:迭代器中給兩個成員:節點的指針和哈希桶的指針

using iterator = hash_bucket::HashTable<K, const K, SetKeyOfT, Hash>::iterator;
//hash_bucket 就是哈希桶

解決iterator和HashTable的相互引用

因為iterator和Hash Table中都是用到了對方,所以編譯的時候編譯器在他們的前面找不到(比如,iterator寫在前面,但找不到HashTable:因為編譯的時候是往iterator的前面找,而不是往后面找)
所以我們要在iterator前面先聲明一下:前置聲明

注意:前置聲明要去掉缺省參數。

解決_tables私有成員無法訪問

在operator++()中,我們用到了_tables.size(),但他是私有成員,無法訪問,怎么解決呢?

有兩種方法:

  1. 寫一個GetTables,取出私有成員
  2. 寫一個類模板的友元

類模板的友元要加上模板的聲明

operator[]

先Insert,插入無論成功還是失敗都返回指針

總結

本文到這里就結束了,希望對你有幫助~

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

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

相關文章

Three.js的材質Material信息

Material材質信息,是獨立于物體頂點之外,與渲染效果相關的屬性。比如通過設置材質可以改變物體的顏色、紋理貼圖、光照模式等等。 基本材質【BasicMaterial】 基本材質BasicMaterial的物體,顏色不會因為光照產生明暗、陰影效果。如果沒有指定的材質顏色,那么顏色就是隨機…

協同過濾的一些理解

協同過濾的一些理解 以下是我對協同過濾的一些理解&#xff0c;歡迎來交。 什么是協同過濾 協同過濾&#xff1a;利用相似用戶的行為或相似商品的特征來進行推薦。 協同過濾&#xff08;Collaborative Filtering, CF&#xff09;是推薦系統中一種常用的技術&#xff0c;它基于…

揭秘LLMOps,高效開發大型語言模型

大家好&#xff0c;隨著人工智能&#xff08;AI&#xff09;的蓬勃發展&#xff0c;一個新興領域語言模型運維&#xff08;LLMOps&#xff09;正逐漸成為關注的焦點。LLMOps專注于對大型語言模型&#xff08;LLMs&#xff09;&#xff0c;例如OpenAI的GPT系列&#xff0c;進行全…

SpringBoot Actuator未授權訪問漏洞的解決方法

1. 介紹 Spring Boot Actuator 是一個用于監控和管理 Spring Boot 應用程序的功能模塊。它提供了一系列生產就緒的功能&#xff0c;幫助你了解應用程序的運行狀況&#xff0c;以及在運行時對應用程序進行調整。Actuator 使用了 Spring MVC 來暴露各種 HTTP 或 JMX 端點&#x…

【機器學習】卷積神經(CNN)在圖像識別中的革命性應用:自動駕駛的崛起

卷積神經網絡&#xff08;CNN&#xff09;在圖像識別中的革命性應用&#xff1a;自動駕駛的崛起 一、卷積神經網絡&#xff08;CNN&#xff09;的基本原理二、CNN在圖像識別中的顯著成果三、CNN在自動駕駛汽車中的物體檢測和識別四、CNN在圖像識別中的代碼實例 隨著人工智能和深…

輪式機器人簡介

迄今為止,輪子一般是移動機器人學和人造交通車輛中最流行的運動機構。它可達到很高的效率, 如圖所示, 而且用比較簡單的機械就可實現它的制作。 另外,在輪式機器人設計中,平衡通常不是一個研究問題。 因為在所有時間里,輪式機器人一般都被設計成在任何時間里所有輪子均與地接…

大模型系列之解讀MoE

Mixtral 8x7B 的推出&#xff0c; 使我們開始更多地關注 基于MoE 的大模型架構&#xff0c; 那么&#xff0c;什么是MoE呢&#xff1f; 1. MoE溯源 MoE的概念起源于 1991 年的論文 Adaptive Mixture of Local Experts&#xff08;https://www.cs.toronto.edu/~hinton/absps/jjn…

間隔采樣視頻的代碼

項目統計模型準確率 項目會保存大量視頻&#xff0c;為了統計模型的精度&#xff0c;我們想要十五分鐘抽取一個視頻用來統計。 import os import shutil from datetime import datetime, timedelta #抽取視頻的代碼&#xff0c;會在每個小時的0分、15分、30分、45分取一個命名…

c++ 和c回調混合的一種實現

代碼 #include <iostream> #include <list>using namespace std; struct CallbackBase { virtual void operator()(const char* msg,int len) 0; };void messagesCB(const char* msg,int len) {std::cout<<msg<<" "<<len<<std…

中國土壤類型空間分布數據

中國土壤類型空間分布數據根據全國土壤普查辦公室1995年編制并出版的《1&#xff1a;100萬中華人民共和國土壤圖》數字化生成&#xff0c; 采用了傳統的“土壤發生分類”系統&#xff0c;基本制圖單元為亞類&#xff0c;共分出12土綱&#xff0c;61個土類&#xff0c;227個亞類…

JavaScript原理篇——Promise原理及筆試題實戰演練

Promise 是 JavaScript 中用于處理異步操作的對象&#xff0c;它代表了一個可能還沒有完成的操作的最終完成或失敗&#xff0c;以及其結果值。Promise 對象有三種狀態&#xff1a; Pending&#xff08;進行中&#xff09;&#xff1a;初始狀態&#xff0c;既不是成功&#xff0…

JavaScript BOM - 瀏覽器對象模型

BOM&#xff08;瀏覽器對象模型&#xff09;是JavaScript中與瀏覽器交互的一組API&#xff0c;它提供了一種方法來操作瀏覽器窗口和文檔。BOM由一組對象組成&#xff0c;這些對象允許您訪問瀏覽器本身的功能&#xff0c;而不僅僅是網頁內容。 BOM對象包括&#xff1a; window對…

融知財經:期貨和現貨的區別是什么?哪個風險大?

期貨和現貨在交易對象等方面存在明顯的區別。期貨交易是一種衍生金融工具&#xff0c;主要用于價格發現、風險管理和投機&#xff0c;而現貨交易則是商品和服務的實際買賣。在選擇進行期貨交易還是現貨交易時&#xff0c;投資者需要根據自己的需求和市場情況來決定。 期貨和現貨…

二叉搜索樹 題解 二叉搜索樹的構建 DFS

二叉搜索樹 題目描述 判斷兩序列是否為同一個二叉搜索樹序列。 輸入描述 第一行是一個數 n ( 1 < n < 20 )&#xff0c;表示有 n 個二叉搜索樹序列需要判斷。 接下去一行是一個序列&#xff0c;序列長度小于 10 &#xff0c;包含 0 ~ 9 的數字&#xff0c;沒有重復數…

【Android】Kotlin學習之Lambda表達式

java和kotlin對比 Lambda語法 Lambda隱形參數 it 也可以不使用指定的名稱it, 可以 自定義 Lambda 使用下劃線

原來Python處理word這么簡單:關于python操作文檔的問題

關于python操作文檔的問題 文檔類型&#xff1a;docx 語言&#xff1a;python 我想在文檔中姓名后面的下劃線之上插入一個姓名&#xff0c;并保存為新的文檔&#xff0c; 用python應該怎么實現呢 文檔見下圖 一般情況下&#xff0c;我們在看到題目的時候&#xff0c;應該先審題…

PHP+B/S架構 不良事件管理系統源碼 醫院不良事件報告系統源碼,開發技術vue2+element+laravel8

PHPB/S架構 不良事件管理系統源碼 醫院不良事件報告系統源碼&#xff0c;開發技術vue2elementlaravel8 技術架構&#xff1a;前后端分離&#xff0c;倉儲模式&#xff0c;BS架構&#xff0c; 開發技術&#xff1a;PHPvscodevue2elementlaravel8mysql5.7&#xff0c;專業團隊研…

[AutoSar]lauterbach_001_ORTI_CPUload_Trace

目錄 關鍵詞平臺說明一、ORTI概述二、ORTI文件的生成三、ORTI文件的導入四、Trace 功能4.1 Trace 功能菜單介紹4.2 Trace功能的配置4.3 Trace MCDS 設置4.4 Task Switches斷點的設置4.5 Trace 數據的錄取4.6 CPU 負載和Task調度的查看 關鍵詞 嵌入式、C語言、autosar、OS、BSW…

【高階數據結構】圖--最短路徑問題

圖--最短路徑問題 一、單源最短路徑--Dijkstra算法1、簡介2、解析3、代碼4、測試用例5、打印最小路徑代碼和測試6、缺陷&#xff1a;不能使用負路徑 二、單源最短路徑--Bellman-Ford算法1、簡介2、解析&#xff08;1&#xff09;詳情i、負權問題&#xff1a;一個點只跑一趟找最…

A股行情訂閱工具,支持股票/可轉債level2/level2數據

簡單使用 ./hqCenter -h-initCodesFile string啟動即訂閱的code (default "./data/initCodes.json")-listen stringhttp監聽地址 (default ":31800")-saveHqFile string行情寫入文件,自動加日期后綴。為空則不寫入文件。 (default "./data/hq")-…