【问题标题】:Iterating over HashMap values compared to Vec与 Vec 相比,迭代 HashMap 值
【发布时间】:2017-06-27 09:05:09
【问题描述】:

在我目前正在编写的程序(游戏引擎)中,我想要一种将整数值 (ID) 映射到对象数组的有效方法。我认为最适合此的数据结构是 HashMap,但我也希望能够遍历对象数组。

使用以下方法遍历 HashMap 的值要慢多少:

for val in map.values()

与拥有 Vec 并对其进行迭代相比:

for val in vec.iter()

然后有另一个系统来将 ID 映射到向量的不同索引?

HashMap 方法还有其他缺点吗?

【问题讨论】:

    标签: collections hashmap rust


    【解决方案1】:

    遍历HashMap 会更慢,这仅仅是因为HashMap 中的值没有那么紧密:有空槽。

    有多少空槽取决于您的使用情况,如果您的峰值使用率很高,但是迭代现在大部分为空的 HashMap 将比迭代更紧凑的 Vec 慢得多。

    对于这个特殊的用例,我推荐indexmap,它结合了HashMapVec 的良好特性:

    • 这些值可以通过键访问,性能类似于HashMap
    • 这些值保存在 Vec 中,没有交错的空槽,因此迭代与迭代 Vec 具有相同的性能。

    【讨论】:

    • OrderMap 似乎完全符合我的要求!谢谢!
    猜你喜欢
    • 1970-01-01
    • 2012-10-11
    • 1970-01-01
    • 2021-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-31
    相关资源
    最近更新 更多