C++中的STL数据结构

news2024/12/24 1:17:46

内容来自:代码随想录:哈希表理论基础

1.常见的三种哈希结构

当我们想使用哈希法来解决问题的时候,我们一般会选择如下三种数据结构
数组
set (集合)
map(映射)
在C++中,set 和 map 分别提供以下三种数据结构,其底层实现以及优劣如下表所示:
在这里插入图片描述
std::unordered_set底层实现为哈希表,std::set 和std::multiset 的底层实现是红黑树,红黑树是一种平衡二叉搜索树,所以key值是有序的,但key不可以修改,改动key值会导致整棵树的错乱,所以只能删除和增加。
在这里插入图片描述

std::unordered_map 底层实现为哈希表,std::map 和std::multimap 的底层实现是红黑树。同理,std::map 和std::multimap 的key也是有序的(这个问题也经常作为面试题,考察对语言容器底层的理解)。

当我们要使用集合来解决哈希问题的时候,优先使用unordered_set,因为它的查询和增删效率是最优的,如果需要集合是有序的,那么就用set,如果要求不仅有序还要有重复数据的话,那么就用multiset。

那么再来看一下map ,在map 是一个key value 的数据结构,map中,对key是有限制,对value没有限制的,因为key的存储方式使用红黑树实现的。

其他语言例如:java里的HashMap ,TreeMap 都是一样的原理。可以灵活贯通。

虽然std::set、std::multiset 的底层实现是红黑树,不是哈希表,std::set、std::multiset 使用红黑树来索引和存储,不过给我们的使用方式,还是哈希法的使用方式,即key和value。所以使用这些数据结构来解决映射问题的方法,我们依然称之为哈希法。 map也是一样的道理。

这里在说一下,一些C++的经典书籍上 例如STL源码剖析,说到了hash_set hash_map,这个与unordered_set,unordered_map又有什么关系呢?

实际上功能都是一样一样的, 但是unordered_set在C++11的时候被引入标准库了,而hash_set并没有,所以建议还是使用unordered_set比较好,这就好比一个是官方认证的,hash_set,hash_map 是C++11标准之前民间高手自发造的轮子。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1467583.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

利用LaTex批量将eps转pdf、png转eps、eps转png、eps转svg、pdf转eps

1、eps转pdf 直接使用epstopdf命令(texlive、mitex自带)。 在cmd中进入到eps矢量图片的目录,使用下面的命令: for %f in (*.eps) do epstopdf "%f" 下面是plt保存eps代码: import matplotlib.pyplot as…

win11修改网络算法为BBR2_提升网络环境质量

Win11 BBR2 是Google开发的一种高效的网络拥塞控制算法,玩 Linux 的朋友应该对它还有锐速不陌生。相比Windows默认使用的 CUBIC 算法,BBR2 在网络吞吐量、延迟、全局性能等方面都有一定优势。 如果你日常网络经常丢包或者高延迟可以尝试切换为BBR2算法。…

给自己留个备忘,blender是右手坐标系

所谓右手坐标系,就是三个轴的方向和右手三根手指的方向一致(当然,有要求的,这个要求是大拇指指向x轴方向,食指指向y轴方向,中指指向z轴方向)。 不过blender默认是z轴朝上的,如下图。 右手坐标系…

AI:134-基于深度学习的社交媒体图像内容分析

🚀点击这里跳转到本专栏,可查阅专栏顶置最新的指南宝典~ 🎉🎊🎉 你的技术旅程将在这里启航! 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带有在本地跑过的关键代码,详细讲解供…

Vue3自定义组件v-model双向绑定

无能吐槽一下,虽然用了很多遍v-model,但是还是不得要领,每次看官网都感觉说的不是很清晰,在写的时候还是要查看文档,可能就是不理解原理,这次特意好好写一篇文章,让自己好好理解一下。 自定义一…

什么是IP地址,IP地址详解

在互联网的世界中,每一台连接的设备都需要一个独特的标识,这就是IP地址。IP地址,全称为“Internet Protocol Address”,即互联网协议地址,它是网络中进行数据传输的基础。下面,我们将对IP地址进行详细的解析…

EI论文联合复现:含分布式发电的微网/综合能源系统储能容量多时间尺度线性配置方法程序代码!

适用平台:Matlab/Gurobi 程序提出了基于线性规划方法的多时间尺度储能容量配置方法,以满足微电网的接入要求为前提,以最小储能配置容量为目标,对混合储能装置进行容量配置。程序较为基础,算例丰富、注释清晰、干货满满…

VoVNet(CVPR workshop 2019)原理与代码解析

paper:An Energy and GPU-Computation Efficient Backbone Network for Real-Time Object Detection third-party implementation:https://github.com/huggingface/pytorch-image-models/blob/main/timm/models/vovnet.py 存在的问题 DenseNet通过密…

泰山派学习笔记(二)一步一步编译SDK文件

上一节,我们安装了基于虚拟机的ubuntu系统,并且建立了samba服务打通了win10和ubuntu系统中的文件传输。本节课我们继续对立创官方提供的SDK文件进行编译,学习编译的方法。引用官方的话:如果只想下载别人编译好的固件并且做一些应用…

Linux系统运维:离线安装sar-性能监视和分析工具

目 录 一、前言 二、系统环境 三、安装sar (一)准备工作 1、下载 sar 工具的安装包: 2、将安装包传输到 CentOS 服务器 (二)安装工作 1、解压 2、配置安装 3、编译 4、安装 (三&#xff0…

Ubuntu环境安装MySQL数据库

1.安装过程 打开终端(Terminal)窗口,使用以下命令更新系统软件包: sudo apt update ubuntu环境安装mysql-server和mysql开发包,包括mysql头文件和动态库文件,命令如下: sudo apt-get instal…

15万-20万选纯电车,真劝你不要买合资和新势力

文 | AUTO芯球 作者 | 雷歌 我是怕了, 在后台,不断有朋友要我推荐20万以下/15万以内的纯电车。 比如这位,真心“求”我推荐一下15万以内的车,然后顺带骂我一通“就知道黑”。 好家伙,一边求人办事,一边…

Freertos实时操作系统---基于STM32

一、Freertos简介 1.Freertos介绍 1)RTOS指的是一类的实时操作系统 2)rtos的使用:用户根据对任务来设置其优先级然后来使用调度器来决定哪一个任务来先执行。 3)Freertos的文件数量远低于其他操作系统 4)主要特点&…

力扣经典题目解析--两数之和

两数之和 题目地址: 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 简单来说就是在一个数组中找出两个数,这两个数相加要等于给定的target,下面是完整的题目: 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中…

按照指定的分隔符对字符串进行分割 numpy.char.partition()

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 按照指定的分隔符 对字符串进行分割 numpy.char.partition() [太阳]选择题 请问关于以下代码表述正确的是? import numpy as np a np.array([12_3, 4_5_6]) print(&quo…

一次有趣的nginx Tcp4层代理转发的试验

nginx主配置文件添加配置: stream {log_format proxy $remote_addr [$time_local] $protocol status:$status bytes_sent:$bytes_sent bytes_received:$bytes_received $session_time upstream_addr:"$upstream_addr" "$upstream_bytes_sent" …

Java里常用的集合哪些是线程安全的和不安全的

最近在做一个业务的时候,需要考虑线程的安全性,然后选用集合的时候专门去整理了一下。 线程安全的是: Hashtable,ConcurrentHashMap,Vector ,CopyOnWriteArrayList ,CopyOnWriteArraySet 线程不安全的是: H…

非常实用的利用SAM分割一切大模型,进行抠图。

目录 SAM简介 实现方法 SAM简介 引言: 介绍人工智能(AI)的发展趋势,特别是在图像分割领域。强调基础模型在AI发展中的作用,以及Meta AI开发的SAM模型如何定义这个新的里程碑。 SAM的介绍: 背景&#x…

【论文精读】OS-Copilot: Towards Generalist Computer Agents with Self-Improvement

OS-Copilot: Towards Generalist Computer Agents with Self-Improvement 前言ABSTRACT1 INTRODUCTION2 THE OS-COPILOT FRAMEWORK2.1 PLANNER2.2 CONFIGURATOR2.2.1 DECLARATIVE MEMORY2.2.2 PROCEDURAL MEMORY2.2.3 WORKING MEMORY 2.3 ACTOR 3 THE FRIDAY AGENT3.1 A RUNNIN…

VS中使用xcopy生成后命令报9009错误

错误现象: download下来的代码,在另一台电脑能使用生成后命令xcopy,换一台电脑后该命令不能使用,报如下错误: 2.错误原因: 这是因为xcopy /Y 为Windows程序命令,xcopy其实是Windows下的一个xcopy.exe,如果…