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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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 进行常见的矩阵运算。 矩阵的创建与初始化 在进…