本周小贴士#136:无序容器

2023-11-20 18:30

本文主要是介绍本周小贴士#136:无序容器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

TotW#136最初发表于2017年6月23日
由Matt Kulukundis创作
“有时,当材料真的很好时,你会对自己寄予期望,以使其成为最好的节目。你不只是提供规则的哈希,接着做你的工作,然后回家。”-彼得.丁拉基
长话短说,有关官方最新的推荐,请看https://abseil.io/docs/cpp/guides/container。本贴士介绍新类型,但不是规范的参考。

介绍absl:😗_hash_map

城镇出现了一个新的关联容器系列。他们自夸提高效率并提供早于C++17的访问。他们也对开发者提供直接控制其实现和默认的哈希函数,这对于代码库的长远发展是重要的。新代码应该优先这些类型而不是std::unordered_map。在该系统中的所有map和set有与std::unordered_map相同的API,所以很容易转换到它们。
对于每个absl::_hash_map而言,这里同样也有一个absl::_hash_set;但是,这些图表将只描述map的情况,并且我们也常提到的只是map。
absl::flat_hash_map 和 absl::flat_hash_set
在这里插入图片描述

这些应该是你的默认选择。他们存储他们的value_type到主数组中。因为当它们重新散时移动数据,元素无法使得指针稳定。如果你需要指针稳定或者你的值很大,请考虑使用absl::node_hash_map代替,或者 Absl::flat_has-mak<Key,std::unique_ptr>。
absl::node_hash_map 和 absl::node_hash_set
在这里插入图片描述

敬告:因为在重新散列像map[“a”]=map[“b”]之后将访问无效的内存,指针不稳定。

它们主数组之外分配它们的value_type(如std::unordered_map)。由于这些独立的分配,它们为存储的数据提供指针稳定性(存储在map中的对象的地址不会改变),并且空槽只需要8个字节。另外,它们能够存储既不能移动也不能复制的东西。

我们通常建议您使用 absl::flat_hash_map<K, std::unique_ptr> 而不是 absl::node_hash_map<K, V>,对于 node_hash_set 也是如此。

这篇关于本周小贴士#136:无序容器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/396585

相关文章

Java JUC并发集合详解之线程安全容器完全攻略

《JavaJUC并发集合详解之线程安全容器完全攻略》Java通过java.util.concurrent(JUC)包提供了一整套线程安全的并发容器,它们不仅是简单的同步包装,更是基于精妙并发算法构建... 目录一、为什么需要JUC并发集合?二、核心并发集合分类与详解三、选型指南:如何选择合适的并发容器?在多

python语言中的常用容器(集合)示例详解

《python语言中的常用容器(集合)示例详解》Python集合是一种无序且不重复的数据容器,它可以存储任意类型的对象,包括数字、字符串、元组等,下面:本文主要介绍python语言中常用容器(集合... 目录1.核心内置容器1. 列表2. 元组3. 集合4. 冻结集合5. 字典2.collections模块

Spring Boot中获取IOC容器的多种方式

《SpringBoot中获取IOC容器的多种方式》本文主要介绍了SpringBoot中获取IOC容器的多种方式,包括直接注入、实现ApplicationContextAware接口、通过Spring... 目录1. 直接注入ApplicationContext2. 实现ApplicationContextA

linux配置podman阿里云容器镜像加速器详解

《linux配置podman阿里云容器镜像加速器详解》本文指导如何配置Podman使用阿里云容器镜像加速器:登录阿里云获取专属加速地址,修改Podman配置文件并移除https://前缀,最后拉取镜像... 目录1.下载podman2.获取阿里云个人容器镜像加速器地址3.更改podman配置文件4.使用po

k8s容器放开锁内存限制问题

《k8s容器放开锁内存限制问题》nccl-test容器运行mpirun时因NCCL_BUFFSIZE过大导致OOM,需通过修改docker服务配置文件,将LimitMEMLOCK设为infinity并... 目录问题问题确认放开容器max locked memory限制总结参考:https://Access

通过Docker容器部署Python环境的全流程

《通过Docker容器部署Python环境的全流程》在现代化开发流程中,Docker因其轻量化、环境隔离和跨平台一致性的特性,已成为部署Python应用的标准工具,本文将详细演示如何通过Docker容... 目录引言一、docker与python的协同优势二、核心步骤详解三、进阶配置技巧四、生产环境最佳实践

SpringBoot结合Docker进行容器化处理指南

《SpringBoot结合Docker进行容器化处理指南》在当今快速发展的软件工程领域,SpringBoot和Docker已经成为现代Java开发者的必备工具,本文将深入讲解如何将一个SpringBo... 目录前言一、为什么选择 Spring Bootjavascript + docker1. 快速部署与

Spring IoC 容器的使用详解(最新整理)

《SpringIoC容器的使用详解(最新整理)》文章介绍了Spring框架中的应用分层思想与IoC容器原理,通过分层解耦业务逻辑、数据访问等模块,IoC容器利用@Component注解管理Bean... 目录1. 应用分层2. IoC 的介绍3. IoC 容器的使用3.1. bean 的存储3.2. 方法注

c++中的set容器介绍及操作大全

《c++中的set容器介绍及操作大全》:本文主要介绍c++中的set容器介绍及操作大全,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录​​一、核心特性​​️ ​​二、基本操作​​​​1. 初始化与赋值​​​​2. 增删查操作​​​​3. 遍历方

SpringIOC容器Bean初始化和销毁回调方式

《SpringIOC容器Bean初始化和销毁回调方式》:本文主要介绍SpringIOC容器Bean初始化和销毁回调方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录前言1.@Bean指定初始化和销毁方法2.实现接口3.使用jsR250总结前言Spring Bea