3:容器之分类和各种测试

用容器去存储 一百万个随机数 然后查找指定数据 查看其消耗的时间
主要是看性能和常用 api 适合有一定基础来看

array

拥有静态空间的数组 适合快速插入和读取数据

unordered Containers 其实也实算是一种关联式容器
无序关联容器包括unordered_map、unordered_set 和unordered_multimap、unordered_multiset 四种。

在这里插入图片描述
Deque 双端队列 可以两端扩充
list 链表 (双向链表)每一个元素是用指针串起来的 而且每个链表节点有两个指针 指着前面和后面(老师提到这个链表其实是环状链表)
forward-list 单向链表

Set/Multiset Map/Multimap 二分数 红黑数 插入和删除元素的过程中 会自动调整成平衡二分数 因为红黑数的性能优秀 所以编译器所带的标准库里面的这部分数据结构都是用红黑树来实现的

无序容器的数据结构 存取都非常方便
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

测试array容器

这个函数测试array容器了 放入50w个数据 排序数据 并查找相关数据 共需要多少时间
一共用了多少毫秒(187ms)

bsearch之前用qsort 可以极大提高搜索效率

Because this function may be optimized to use a non-linear search algorithm (presumably a binary search), the elements that compare less than key using compar should precede those that compare equal, and these should precede those that compare greater. This requirement is fulfilled by any array ordered with the same criteria used by compar (as if sorted with qsort).
由于此函数可以优化为使用非线性搜索算法(可能是二进制搜索),因此使用 compar 比较小于键的元素应先于比较相等的元素,并且这些元素应先于比较较大的元素。使用与 compar 相同的条件排序的任何数组都满足此要求(就像用 排序 qsort 一样)。


在这里插入图片描述

测试vector容器

源代码如下

在这里插入图片描述
vector 容器扩容的机制是 空间不够的时候在原来的基础上的两倍 而且只能往后扩展
vector 在扩容的时候 会寻找一片原来空间两倍的空间 会把原来空间里面的东西拷贝到新的空间里面去
在这里插入图片描述

在这里插入图片描述

list容器

在这里插入图片描述

注意:


在C++标准模板库(STL)中,std::list 是一个双向链表容器。这个容器提供了各种成员函数来操作链表中的数据。其中,max_size() 是一个成员函数,它返回 list 容器可能持有的最大元素数。 然而,实际上 max_size() 返回的值通常是一个非常大的数,代表理论上的最大限制,而不是实际机器上可用的内存大小。这是因为 max_size() 返回的值通常是由 size_t 类型能够表示的最大值,而不是由可用内存决定的。 在大多数实现中,max_size() 的返回值是如此之大,以至于在实际使用中几乎不可能达到这个限制,因为这将需要远超过任何实际机器的内存。这个值主要用于理论分析和比较不同容器类型之间的潜在大小差异。 如果你需要检查是否有可能在添加更多元素时耗尽内存,你应该考虑其他方法,比如检查 std::bad_alloc 异常(在尝试分配内存但失败时抛出),或者手动管理你的内存使用。但是,请注意,即使你检查了 max_size() 并确信你有足够的空间,这也不能保证在添加更多元素时不会耗尽内存,因为其他程序或系统进程也可能正在使用内存。 ---

forward_list容器测试

单向链表测试

在这里插入图片描述

slist

在这里插入图片描述

slist和forword_list基本相同 不同点就在于其所在的库
使用slist需要包含
#include<ext\list>
而使用forward_list则需要包含
#include<forward_list>

deque容器

双端队列容器 具有队列和栈的特性 很强大的数据结构

在这里插入图片描述

deque容器其实是一段一段buffer组合而成的,用指针给它串联到一起, 可以同时向两边扩展,从一个指针的buffer末尾跳转到下一个指针的buffer头部 是使用了指针++的操作来实现的
每次扩充一个buffer
使用和上面差不多的测试方法 得到的测试结果如下

在这里插入图片描述

stack容器

先进后出的栈式容器

在这里插入图片描述

quque

单项队列容器
在这里插入图片描述

为什么stack 和 queue这样的容器 没有迭代器的相关内容

因为如果有迭代器 就可以通过迭代器 去修改其中的内容 破坏了 它们独有的特性

multiset

底层是红黑树 红黑树插入元素是insert
插入的位置 不是头也不是尾 而是它本身该出现的位置
关联式容器查找某个值的速度非常快

multiset 表示可以插入重复元素的集合
注意:


代码里面有使用 stl自带的find 和 容器自带的find 一般容器自带的find 效率更高 stl的find 泛用性更广

在这里插入图片描述

multimap

map 是key 和 value的一种映射

查找的事件 没有显示出来 用0表示 说明可能是纳秒级别的

插入的key value 所以要用pair来组合一下

去数据的时候 需要用first 和 second 来访问
在这里插入图片描述

unordered_multiset

在这里插入图片描述

在这里插入图片描述
通过上面的结果可以看到 unordered_multiset 其实是用哈希表来存储的
哈希桶的数量要比插入的元素的数量还要多 这样设计居然是合理的
而且每次当哈希里面的元素个数要多余哈希桶的数量的时候 这个哈希桶的数量就要翻倍处理


哈希表上的负载因子(Load Factor)是一个用于衡量散列表(如哈希表)填充程度的参数。它表示哈希表中已存储元素数量与哈希表总容量之间的比率,通常以符号λ表示,计算公式为:λ = (已存储元素数量) / (哈希表总容量)。

负载因子的大小对哈希表的性能有重要影响。当负载因子较小时,哈希表相对空闲,有较多的空闲槽位可供使用,这有助于提高插入和查找操作的性能。然而,这也会浪费一定的内存空间。相反,当负载因子较大时,哈希表的槽位大部分被占用,这可能会导致哈希冲突的增加,进而影响哈希表的性能。

因此,在实际应用中,需要根据具体需求和场景来设置合适的负载因子。通常,负载因子会设置为一个介于0和1之间的值,例如0.7或0.75,以达到性能和空间的平衡。当负载因子超过这个阈值时,哈希表可能会自动扩容,创建两倍于原来个数的箱子,以容纳更多的元素,并降低哈希冲突的概率。这个过程也称为重哈希(rehash)。

总之,哈希表的负载因子是一个重要的参数,它决定了哈希表的填充程度和性能表现。在实际应用中,需要根据具体情况来设置合适的负载因子,以达到最优的性能和空间利用率。


unordered_multimap

在这里插入图片描述

set

不可以重复 放入值
在这里插入图片描述
可以看到我们插入的值 数量有100w 但是值没有那么多 只有32768个

map

在这里插入图片描述

这里面有个元素 插入元素 不能重复
可以通过访问下标直接访问到元素 直接进行插入操作 这里面有个自动生成pair的过程 因为其key是 不同的 所以map的size 还是100w个

hash 容器改名unordered部分


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

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

相关文章

计算机视觉科普到实践

第一部分&#xff1a;计算机视觉基础 引言&#xff1a; 计算机视觉作为人工智能领域的一个重要分支&#xff0c;近年来取得了显著的进展。本文将带领读者深入了解计算机视觉的基础知识&#xff0c;并通过实践案例展示其应用。让我们一同探索这个令人着迷的领域吧&#xff01;…

docker compose mysql主从复制及orchestrator高可用使用

1.orchestrator 功能演示&#xff1a; 1.1 多级级联&#xff1a; 1.2 主从切换&#xff1a; 切换成功后&#xff0c;原来的主库是红色的&#xff0c;需要在主库的配置页面点击“start replication ”&#xff0c;重新连接上新的主库。 1.3 主从故障&#xff0c;从库自动切换新…

高精度(加减乘除)

1.加法 我们第一位存低位&#xff08;倒着存方便&#xff09; 下面是AC代码&#xff1a; #include<bits/stdc.h> using namespace std; const int N1e610; vector<int> add(vector<int> &A,vector<int> &B) {vector<int> c;int t0;for…

【JVM】从硬件层面和应用层面的有序性和可见性,到Java的volatile和synchronized

Java的关键字volatile保证了有序性和可见性&#xff0c;这里我试着从底层开始讲一下有序性和可见性。 一&#xff0c;一致性 数据如果同时被两个cpu读取了&#xff0c;如何保证数据的一致性&#xff1f;或者换句话说&#xff0c;cpu1改了数据&#xff0c;cpu2的数据就成了无效…

基于AT89C52单片机的智能热水器控制系统

点击链接获取Keil源码与Project Backups仿真图&#xff1a; https://download.csdn.net/download/qq_64505944/89242443?spm1001.2014.3001.5503 C 源码仿真图毕业设计实物制作步骤05 题 目 基于单片机的智能热水器系统 学 院 专 业 班 级 学 号 学生姓名 指导教师 完成日期…

242 基于matlab的3D路径规划

基于matlab的3D路径规划&#xff0c;蚁群算法&#xff08;ACO&#xff09;和天牛须&#xff08;BAS&#xff09;以及两种结合的三种优化方式&#xff0c;对3D路径规划的最短路径进行寻优。程序已调通&#xff0c;可直接运行。 242 3D路径规划 蚁群算法和天牛须 - 小红书 (xiaoh…

ant-design中的穿梭框提示文字修改

ant-design中的穿梭框提示文字修改 1.ant-design中的穿梭框提示文字修改 <a-transferv-model:target-keys"targetKeys":data-source"transform.list":filter-option"filterOption":list-style"{width: 100%,height: 500px,}":rowK…

unity入门学习笔记

文章目录 unity学习笔记熟悉界面窗口页面快捷键视图特点移动、旋转、缩放快捷键聚焦和隐藏 一些基本概念模型模型的导入一些补充 资源文件资源包的导出资源包的导入 轴心物体的父子关系空物体Global与localpivot与center 组件脚本基础我的第一个脚本 获取脚本组件本地坐标播放模…

顶顶顶顶顶顶顶顶顶顶顶顶

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和技术。关…

【电子通识】为什么用双绞线?双绞线抗干扰的原理是什么?

使用双绞线最大的理由是抗干扰。不仅可以防止别人干扰,也可以防止自己干扰别人。这与EMC中的EMS和EMI相对应(参考【EMC专题】电磁兼容--基本概念)。 双绞线是由一对带有绝缘层的铜线(绝缘层使两根线中的金属导体不会因为互碰而导致短路)以螺旋的方式缠绕在一起所构成的。通…

ElementUI从unpkg.com完整下载到本地的方法 - 解决unpkg.com不稳定的问题 - 自建镜像站 - 不想打包只想cdn一下

方法 方法1&#xff09;随便弄个文件夹&#xff0c;根据官网npm方法下载包&#xff0c;提取即可 npm i element-ui -S cd /node_modules/element-ui/ ls src 安装npm方法&#xff1a;https://nodejs.org/en 方法2&#xff09;不推荐 - 在github中搜索对应的库zip包&#xff0…

【网络原理】HTTP 协议的基本格式和 fiddler 抓包工具的用法

系列文章目录 【网络通信基础】网络中的常见基本概念 【网络编程】网络编程中的基本概念及Java实现UDP、TCP客户端服务器程序&#xff08;万字博文&#xff09; 【网络原理】UDP协议的报文结构 及 校验和字段的错误检测机制&#xff08;CRC算法、MD5算法&#xff09; 【网络…

PG实例连接访问控制

实例访问控制可以控制来自于不同主机&#xff0c;不同用户是否允许访问指定的数据库&#xff0c;以及验证方式。 与oracle中的连接管理器的功能相同&#xff0c;之前有写过一篇oracleCMAN连接管理器的配置实操&#xff1a; 配置oracle连接管理器&#xff08;cman&#xff09;…

深度学习每周学习总结P7(咖啡豆识别)

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制 –来自百度网盘超级会员V5的分享 数据链接 提取码&#xff1a;7zt2 –来自百度网盘超级会员V5的分享 目录 0. 总结1. 数据导入及处理部分…

文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《电-氢-混氢天然气耦合的城市综合能源系统低碳优化调度》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

Java | Leetcode Java题解之第68题文本左右对齐

题目&#xff1a; 题解&#xff1a; class Solution {private String line(List<String> list,int maxWidth,int totalLength,boolean isLast){StringBuilder sb new StringBuilder();sb.append(list.get(0));if(list.size() 1){String ap " ".repeat(maxW…

二维数组的鞍点(C语言)

一、鞍点解释&#xff1b; 鞍点就是该位置上的元素在该行上最大、在该列上最小&#xff1b; 二、N-S流程图&#xff1b; 三、运行结果&#xff1b; 四、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>int main() {//初始化变量值&#xff…

定制开发AI名片商城AI导购系统:引领营销自动化的新时代

在数字营销日新月异的今天&#xff0c;一个革命性的工具——定制开发AI名片商城AI导购系统&#xff0c;正逐渐崭露头角&#xff0c;成为企业私域运营中的得力助手。它不仅仅是一个营销工具&#xff0c;更是一个拥有强大营销自动化能力和先进算法技术的在线助理&#xff0c;为企…

【neteq】tgcall的调用

G:\CDN\P2P-DEV\Libraries\tg_owt\src\call\call.cc基本是按照原生webrtc的来的:G:\CDN\P2P-DEV\tdesktop-offical\Telegram\ThirdParty\tgcalls\tgcalls\group\GroupInstanceCustomImpl.cpptg对neteq的使用 worker 线程创建call Call的config需要neteqfactory Call::CreateAu…

[1702]java旅游资源网上填报系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java旅游资源网上填报系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql…