13个版本 (3个稳定版)

2.0.0 2022年7月17日
1.1.0 2022年6月11日
0.8.0 2022年6月9日
0.7.1 2021年12月1日
0.2.1 2016年12月13日

数据结构 中排名第247

Download history 15889/week @ 2024-04-22 17800/week @ 2024-04-29 16150/week @ 2024-05-06 16914/week @ 2024-05-13 16881/week @ 2024-05-20 18916/week @ 2024-05-27 21641/week @ 2024-06-03 17069/week @ 2024-06-10 17549/week @ 2024-06-17 14472/week @ 2024-06-24 13068/week @ 2024-07-01 14320/week @ 2024-07-08 13235/week @ 2024-07-15 12506/week @ 2024-07-22 11858/week @ 2024-07-29 13078/week @ 2024-08-05

每月下载量达到51,902
32 软件包中使用(直接使用17个)

MIT 协议

26KB
515

crates.io

rust-intmap

针对u64键的特殊化HashMap

可能缺少一些功能,但现在可以删除、添加、获取和清除。

请注意,没有针对DoS攻击的努力。

与标准HashMap的性能比较

test tests::u64_get_built_in    ... bench:      22,320 ns/iter (+/- 446)
test tests::u64_get_intmap      ... bench:       2,959 ns/iter (+/- 148)
test tests::u64_insert_built_in ... bench:      27,666 ns/iter (+/- 1,230)
test tests::u64_insert_intmap   ... bench:      14,047 ns/iter (+/- 1,461)

重大变更

2.0.0 - 将 insert 的行为更改为与 std::HashMap 匹配。旧的行为被重命名为 insert_checked

如何使用

简单示例。

extern crate intmap;

use intmap::IntMap;

let mut map = IntMap::new();

for i in 0..20_000 {
    map.insert(i, format!("item: {:?}", i));
}

它为什么会这么快?

我使用了一个针对u64的特殊化哈希函数,它将键与u64的最大素数相乘。通过保持内部缓存为2的幂,可以避免昂贵的模运算符,如http://stackoverflow.com/questions/6670715/mod-of-power-2-on-bitwise-operators所述。

#[inline]
fn hash_u64(seed: u64) -> u64 {
    let a = 11400714819323198549u64;
    let val = a.wrapping_mul(seed);
    val
}

依赖项

~170KB