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

编程入门 行业动态 更新时间:2024-10-08 18:41:04

本周小贴士#136:无序<a href=https://www.elefans.com/category/jswz/34/1771431.html style=容器"/>

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

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

介绍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:无序容器

本文发布于:2024-02-13 06:14:34,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1757129.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:容器   小贴士   本周

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!