与Vec相比,迭代HashMap值

时间:2017-06-27 09:05:10

标签: collections hashmap rust

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

使用:

迭代HashMap的值要慢多少
for val in map.values()

与拥有Vec并迭代它相比:

for val in vec.iter()

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

HashMap方法还有其他缺点吗?

1 个答案:

答案 0 :(得分:4)

HashMap进行迭代会更慢,只是因为HashMap中的值不是那么紧密:有空插槽。

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

对于这个特殊用例,我建议ordermap结合HashMapVec的良好特征:

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