#string #hash-map #compact #hash #fnv

inohashmap

快速且高效的仅插入字符串的 hashmap

5 个不稳定版本

0.3.0 2020 年 12 月 22 日
0.2.1 2020 年 12 月 21 日
0.2.0 2020 年 12 月 21 日
0.1.1 2020 年 12 月 21 日
0.1.0 2020 年 12 月 21 日

#3 in #fnv

每月 25 次下载

MIT 许可协议

22KB
454 代码行,不含注释

Inohashmap

以快速且紧凑的方式在 hashmap 中存储字符串的值。

适用于计数字符串并为它们分配 ID 或类似操作。字符串数据的地址空间限制为 u32::MAX (4GB)。字符串数据的大小是所有唯一插入的字符串的字节数加上每个字符串的长度元数据。

示例

use inohashmap::StringHashMap;
let mut hashmap = StringHashMap::<u32>::new();
let val = hashmap.get_or_create("blub1", 0);
assert_eq!(*val, 0);
*val += 1;
let val = hashmap.get_or_create("blub2", 2);
assert_eq!(*val, 2);

内存消耗

内存消耗低于常规 hashmap,在 compare_allocations 测试中低 30%。

基准测试

running 11 tests
test tests::bench_fnv                            ... bench:     141,906 ns/iter (+/- 9,414)
test tests::bench_fnv_full                       ... bench:   5,180,066 ns/iter (+/- 392,488)
test tests::bench_fnv_full_get                   ... bench:   3,914,865 ns/iter (+/- 210,328)
test tests::bench_hasmap                         ... bench:     124,689 ns/iter (+/- 5,389)
test tests::bench_hasmap_full                    ... bench:   5,006,276 ns/iter (+/- 166,848)
test tests::bench_hasmap_full_get                ... bench:   4,015,903 ns/iter (+/- 149,086)
test tests::bench_hasmap_full_large_struct       ... bench:   5,533,528 ns/iter (+/- 201,944)
test tests::bench_tant_termmap                   ... bench:     123,695 ns/iter (+/- 6,106)
test tests::bench_tant_termmap_full              ... bench:   5,454,897 ns/iter (+/- 157,208)
test tests::bench_tant_termmap_full_get          ... bench:   5,047,846 ns/iter (+/- 181,768)
test tests::bench_tant_termmap_full_large_struct ... bench:   5,644,069 ns/iter (+/- 269,745)

依赖项

~27KB