26、跳表

在C++標準庫中,std::mapstd::set 是使用紅黑樹作為底層數據結構的容器。
紅黑樹是一種自平衡二叉搜索樹,能夠保證插入、刪除和查找操作的時間復雜度為O(log n)。

以下是一些使用紅黑樹的C++標準庫容器:

  1. std::map:一種關聯容器,存儲鍵值對,并根據鍵進行排序。
  2. std::set:一種關聯容器,存儲唯一的鍵,并根據鍵進行排序。

示例代碼:

#include <iostream>
#include <map>
#include <set>int main() {// 使用std::mapstd::map<int, std::string> myMap;myMap[1] = "one";myMap[2] = "two";myMap[3] = "three";for (const auto& pair : myMap) {std::cout << pair.first << ": " << pair.second << std::endl;}// 使用std::setstd::set<int> mySet;mySet.insert(1);mySet.insert(2);mySet.insert(3);for (const auto& element : mySet) {std::cout << element << std::endl;}return 0;
}

在這個示例中,std::mapstd::set 都使用紅黑樹作為底層數據結構來存儲和管理元素。


以下是一個簡單的跳表實現示例:

#include <iostream>
#include <cstdlib>
#include <ctime>
#include <vector>class SkipListNode {
public:int value;std::vector<SkipListNode*> forward;SkipListNode(int val, int level) : value(val), forward(level, nullptr) {}
};class SkipList {
private:int maxLevel;float probability;SkipListNode* header;int randomLevel() {int level = 1;while (((float)std::rand() / RAND_MAX) < probability && level < maxLevel) {level++;}return level;}public:SkipList(int maxLevel, float probability) : maxLevel(maxLevel), probability(probability) {header = new SkipListNode(-1, maxLevel);}void insert(int value) {std::vector<SkipListNode*> update(maxLevel, nullptr);SkipListNode* current = header;for (int i = maxLevel - 1; i >= 0; i--) {while (current->forward[i] != nullptr && current->forward[i]->value < value) {current = current->forward[i];}update[i] = current;}int level = randomLevel();SkipListNode* newNode = new SkipListNode(value, level);for (int i = 0; i < level; i++) {newNode->forward[i] = update[i]->forward[i];update[i]->forward[i] = newNode;}}bool search(int value) {SkipListNode* current = header;for (int i = maxLevel - 1; i >= 0; i--) {while (current->forward[i] != nullptr && current->forward[i]->value < value) {current = current->forward[i];}}current = current->forward[0];return current != nullptr && current->value == value;}void display() {for (int i = 0; i < maxLevel; i++) {SkipListNode* node = header->forward[i];std::cout << "Level " << i + 1 << ": ";while (node != nullptr) {std::cout << node->value << " ";node = node->forward[i];}std::cout << std::endl;}}
};int main() {std::srand(std::time(0));SkipList list(4, 0.5);list.insert(3);list.insert(6);list.insert(7);list.insert(9);list.insert(12);list.insert(19);list.insert(17);list.insert(26);list.insert(21);list.insert(25);list.display();std::cout << "Search for 19: " << (list.search(19) ? "Found" : "Not Found") << std::endl;std::cout << "Search for 15: " << (list.search(15) ? "Found" : "Not Found") << std::endl;return 0;
}

這個示例實現了一個簡單的跳表,支持插入和搜索操作。可以根據需要擴展這個實現。

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

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

相關文章

LabVIEW音頻測試分析

LabVIEW通過讀取指定WAV 文件&#xff0c;實現對音頻信號的播放、多維度測量分析功能&#xff0c;為音頻設備研發、聲學研究及質量檢測提供專業工具支持。 主要功能 文件讀取與播放&#xff1a;支持持續讀取示例數據文件夾內的 WAV 文件&#xff0c;可實時播放音頻以監聽被測信…

JUC并發編程(二)Monitor/自旋/輕量級/鎖膨脹/wait/notify/鎖消除

目錄 一 基礎 1 概念 2 賣票問題 3 轉賬問題 二 鎖機制與優化策略 0 Monitor 1 輕量級鎖 2 鎖膨脹 3 自旋 4 偏向鎖 5 鎖消除 6 wait /notify 7 sleep與wait的對比 8 join原理 一 基礎 1 概念 臨界區 一段代碼塊內如果存在對共享資源的多線程讀寫操作&#xf…

Doris 與 Elasticsearch:誰更適合你的數據分析需求?

一、Doris 和 Elasticsearch 的基本概念 &#xff08;一&#xff09;Doris 是什么&#xff1f; Doris 是一個用于數據分析的分布式 MPP&#xff08;大規模并行處理&#xff09;數據庫。它主要用于存儲和分析大量的結構化數據&#xff08;比如表格數據&#xff09;&#xff0c…

使用Virtual Serial Port Driver+com2tcp(tcp2com)進行兩臺電腦的串口通訊

使用Virtual Serial Port Drivercom2tcp或tcp2com進行兩臺電腦的串口通訊 問題說明解決方案方案三具體操作流程網上教程軟件安裝拓撲圖準備工作com2tcp和tcp2com操作使用串口助手進行驗證 方案三存在的問題數據錯誤通訊延時 問題說明 最近想進行串口通訊的一個測試&#xff0c…

transformer和 RNN以及他的幾個變體區別 改進

Transformer、RNN 及其變體&#xff08;LSTM/GRU&#xff09;是深度學習中處理序列數據的核心模型&#xff0c;但它們的架構設計和應用場景有顯著差異。以下從技術原理、優缺點和適用場景三個維度進行對比分析&#xff1a; 核心架構對比 模型核心機制并行計算能力長序列依賴處…

CSS6404L 在物聯網設備中的應用優勢:低功耗高可靠的存儲革新與競品對比

物聯網設備對存儲芯片的需求聚焦于低功耗、小尺寸、高可靠性與傳輸效率&#xff0c;Cascadeteq 的 CSS6404L 64Mb Quad-SPI Pseudo-SRAM 憑借差異化技術特性&#xff0c;在同類產品中展現顯著優勢。以下從核心特性及競品對比兩方面解析其應用價值。 一、CSS6404L 核心產品特性…

go語言map擴容

map是什么&#xff1f; ?在Go語言中&#xff0c;map是一種內置的無序key/value鍵值對的集合&#xff0c;可以根據key在O(1)的時間復雜度內取到value&#xff0c;有點類似于數組或者切片結構&#xff0c;可以把數組看作是一種特殊的map&#xff0c;數組的key為數組的下標&…

2025年SDK游戲盾實戰深度解析:防御T級攻擊與AI反作弊的終極方案

一、引言&#xff1a;游戲安全的“生死防線” 2025年&#xff0c;全球游戲行業因DDoS攻擊日均損失3.2億元&#xff0c;攻擊峰值突破8Tbps&#xff0c;且70% 的攻擊為混合型&#xff08;DDoSCC&#xff09;。傳統高防IP因延遲高、成本貴、協議兼容性差&#xff0c;已無法滿足實…

【Linux】LInux下第一個程序:進度條

前言&#xff1a; 在前面的文章中我們學習了LInux的基礎指令 【Linux】初見&#xff0c;基礎指令-CSDN博客【Linux】初見&#xff0c;基礎指令&#xff08;續&#xff09;-CSDN博客 學習了vim編輯器【Linux】vim編輯器_linux vim insert-CSDN博客 學習了gcc/g【Linux】編譯器gc…

Web前端基礎

### 一、瀏覽器 火狐瀏覽器、谷歌瀏覽器(推薦)、IE瀏覽器 推薦谷歌瀏覽器原因&#xff1a; 1、簡潔大方,打開速度快 2、開發者調試工具&#xff08;右鍵空白處->檢查&#xff0c;打開調試模式&#xff09; ### 二、開發工具 核心IDE工具 1. Visual Studio Code (VS Code)?…

C++調試(肆):WinDBG分析Dump文件匯總

目錄 1.前言 2.WinDBG中常用的指令 3.分析異常時要關注的信息 4.心得 前言 本篇博客主要針如何使用WinDBG工具調試Dump文件的流程進行一個講解&#xff0c;具體捕獲的Dump文件也是前兩節例子中生成的Dump文件。 WinDBG中常用的指令 關于WinDBG調試時常用的指令主要分為以下幾種…

SOC-ESP32S3部分:33-聲學前端模型ESP-SR

飛書文檔https://x509p6c8to.feishu.cn/wiki/YnbmwtqI5iBwE3kHA7AcZ3yTnLf ESP-SR 是樂鑫官方開發的一個音頻組件&#xff0c;支持以下模塊&#xff1a; 聲學前端算法 AFE喚醒詞檢測 WakeNet命令詞識別 MultiNet語音合成&#xff08;目前只支持中文&#xff09; 組件地址&am…

基于vscode,idea,java,html,css,vue,echart,maven,springboot,mysql數據庫,在線考試系統

詳細視頻&#xff1a;【基于vscode,idea,java,html,css,vue,echart,maven,springboot,mysql數據庫&#xff0c;在線考試系統-嗶哩嗶哩】 https://b23.tv/7hwmwmQ

【Linux】shell中的運行流程控制

目錄 一.什么是運行流程控制 二.條件允許流程控制--if 2.1.單分支 2.2.雙分支 2.3.多分支 if多分支練習 三.循環運行流程控制 無判定循環--for 判斷循環--while&#xff0c;until 四.選擇運行流程控制 五.自動應答--expect 5.1.固定位置的交互應答 5.2.非固定位置的…

新能源汽車熱管理核心技術解析:冬季續航提升40%的行業方案

新能源汽車熱管理核心技術解析&#xff1a;冬季續航提升40%的行業方案 摘要&#xff1a;突破續航焦慮的關鍵在熱能循環&#xff01; &#x1f449; 本文耗時72小時梳理行業前沿方案&#xff0c;含特斯拉/比亞迪等8家車企熱管理系統原理圖 一、熱管理為何成新能源車決勝關鍵&am…

OCR MLLM Evaluation

為什么需要評測體系&#xff1f;——背景與矛盾 ?? 能干的事&#xff1a;?? 看清楚發票、身份證上的字&#xff08;準確率>90%&#xff09;&#xff0c;速度飛快&#xff08;眨眼間完成&#xff09;。??干不了的事&#xff1a;?? 碰到復雜表格&#xff08;合并單元…

深入解析JVM工作原理:從字節碼到機器指令的全過程

一、JVM概述 Java虛擬機(JVM)是Java平臺的核心組件&#xff0c;它實現了Java"一次編寫&#xff0c;到處運行"的理念。JVM是一個抽象的計算機器&#xff0c;它有自己的指令集和運行時內存管理機制。 JVM的主要職責&#xff1a; 加載&#xff1a;讀取.class文件并驗…

Python繪圖庫及圖像類型之特殊領域可視化

Python繪圖庫及圖像類型之基礎圖表-CSDN博客https://blog.csdn.net/weixin_64066303/article/details/148433762?spm1001.2014.3001.5501 Python繪圖庫及圖像類型之高級可視化-CSDN博客https://blog.csdn.net/weixin_64066303/article/details/148450750?spm1001.2014.3001.…

04 APP 自動化- Appium toast 元素定位列表滑動

文章目錄 一、toast 元素的定位二、滑屏操作 一、toast 元素的定位 toast 元素就是簡易的消息提示框&#xff0c;toast 顯示窗口顯示的時間有限&#xff0c;一般3秒左右 # -*- codingutf-8 -*- from time import sleep from appium import webdriver from appium.options.an…

C/C++ OpenCV 矩陣運算

C/C OpenCV 矩陣運算詳解 &#x1f4a1; OpenCV 是一個強大的開源計算機視覺和機器學習庫&#xff0c;它提供了豐富的矩陣運算功能&#xff0c;這對于圖像處理和計算機視覺算法至關重要。本文將詳細介紹如何使用 C/C 和 OpenCV 進行常見的矩陣運算。 矩陣的創建與初始化 在進…