10个版本 (2个稳定)
1.0.1 | 2020年7月2日 |
---|---|
0.6.0 | 2020年6月16日 |
0.5.2 | 2020年6月15日 |
0.5.1 | 2020年2月23日 |
0.5.0 | 2019年11月15日 |
在 数据结构 中排名第790
每月下载量2,937
用于 4 个 软件包(直接使用2个)
48KB
1K SLoC
VecMap:Map API,但具有线性搜索
基于std::vec::Vec的Map,动机在于对于某些键类型,在小型映射中,遍历向量可能比其他方法更快。
此映射实现上的大多数操作都工作在O(n),包括HashMap中的O(1)操作。然而,优化器可以对连续数组(如Vec)施以魔法,因此对于小型集合(例如整数键的256个元素),遍历向量实际上比不太分支和缓存可预测的哈希映射提供了更好的性能。
功能
VecMap 提供与HashMap相似的保证,但也有一些轻微的差异:首先,键不需要是可哈希的或可排序的,只需要相等即可。
与HashMap一样,VecMap不保证指针稳定性:增长容量可能会重新定位向量的内容,并且删除项目将重新定位向量的最后一个元素。
何时使用它
您可能想使用typedef来允许自己进行实验并验证它是否适合您的用例,但作为一个经验法则:如果您不打算在映射中存储超过一百个元素,但仍想在代码中表达它确实是一个映射,那么您可能应该选择VecMap。
它与 linear_map
如何比较
虽然它们非常相似(毕竟我们共享相同的API),但有一个关键的区别:linear_map
的内部结构是一个 Vec<(K, V)>
,而 vector_map
使用 struct {keys: Vec
。
鉴于这两种实现最常见的操作都是对键的线性搜索,VecMap
具有将键更紧密打包的优势,在测试相同数量的键时,需要更少的缓存请求。
这使得在某些操作中,VecMap
比LinearMap
略快,尤其是在V
远大于K
时。然而,您仍然应该为您的应用程序测试两者,以确定哪一个更适合您。
我使用合约,我需要为它们付费吗?
除非您明确启用它们,使用此存储库的enable_contracts
功能。由于大多数合约都需要检查映射是否包含键,否则它们将各自运行自己的键搜索,这不是一件高效的事情。
依赖项
~2MB
~46K SLoC