6个稳定版本
2.0.3 | 2020年2月28日 |
---|---|
2.0.2 | 2019年12月11日 |
2.0.0 | 2019年4月28日 |
1.1.0 | 2019年4月10日 |
0.1.0 |
|
#256 在 数据结构
97,909 每月下载量
在 180 个crate中使用 (13 个直接使用)
13KB
142 行
hash_hasher
一个专为与已哈希或类似哈希的数据一起工作而设计的 std::hash::Hasher
。
详细信息
提供的哈希器假定输入数据已经适合用作HashSet
或HashMap
中的键,因此在内部做最小的工作。
除了性能优势外,它还导致HashSet
或HashMap
变得有些确定。给定两个包含多个元素的相等HashSet
或HashMap
,迭代它们将产生不同的顺序。通过使用hash_hasher::HashedSet
或hash_hasher::HashedMap
,如果以相同的顺序插入和/或删除相同的数据,则迭代集合将产生一致的顺序。
示例
由于为使用自定义哈希器的HashSet
或HashMap
不可用new
和with_capacity
,因此可用的构造函数为default()
、with_hasher()
和with_capacity_and_hasher()
。
extern crate hash_hasher;
use hash_hasher::{HashBuildHasher, HashedMap, HashedSet};
let mut map = HashedMap::default();
assert!(map.insert(0, "zero").is_none());
let mut set = HashedSet::with_capacity_and_hasher(100, HashBuildHasher::default());
assert!(set.insert(0));
基准测试
包括基准测试套件,示例结果可以在AppVeyor结果和Travis结果的夜间作业的末尾找到。
例如
insert_sha1s_into_set_using_default_hasher ... bench: 1,171 ns/iter (+/- 30)
insert_sha1s_into_set_using_hash_hasher ... bench: 533 ns/iter (+/- 9)
insert_sha256s_into_set_using_default_hasher ... bench: 1,340 ns/iter (+/- 57)
insert_sha256s_into_set_using_hash_hasher ... bench: 546 ns/iter (+/- 11)
insert_sha512s_into_set_using_default_hasher ... bench: 1,804 ns/iter (+/- 2,597)
insert_sha512s_into_set_using_hash_hasher ... bench: 704 ns/iter (+/- 22)
insert_sip_hashes_into_set_using_default_hasher ... bench: 781 ns/iter (+/- 33)
insert_sip_hashes_into_set_using_hash_hasher ... bench: 256 ns/iter (+/- 50)
许可证
在以下两者之一下授权
由您自行决定。
贡献
除非您明确声明,否则根据Apache-2.0许可证定义,您有意提交并包含在作品中的任何贡献,将按照上述方式双许可,不附加任何额外条款或条件。