6 个版本
0.2.1 | 2024年2月27日 |
---|---|
0.2.0 | 2024年2月27日 |
0.1.3 | 2024年2月22日 |
#1053 in 数据结构
68KB
1.5K SLoC
multi_containers
该软件包实现了可以包含重复值的容器。如果您曾经编写过 HashMap<K, HashSet<V>>
,那么这个软件包就是为您准备的。
该软件包不稳定,其API可能在1.0.0之前随时更改.
该软件包的精神与以下其他语言中的容器相似
- Java的
Guava
库的Multimap
和Multiset
(这个软件包受到了很大的启发)。 - Python的
collections.defaultdict(set)
和collections.Counter
。 - C++的
std::(unordered_)mutlimap
和std::(unordered_)multiset
。
用法
主要容器是 MultiMap
和 MultiSet
。有关更多示例,请参阅 examples.rs
。
MultiMap
MultiMap
是对 Map<K, Set<V>>
的包装。您可以使用提供的 HashMultiMap
或 BTreeMultiMap
,或者使用 MultiMapBuilder
提供自己的类型。API 与您期望的 HashMap<K, HashSet<V>>
类似,但增加了一些与多个值相关的方法。出于记录原因,内部集合不可可变地暴露。MultiMap
还提供了遍历 (&K, &Set<V>)
或 (&K, &V)
的方法。
use multi_containers::HashMultiMap;
let mut map = HashMultiMap::new();
map.insert("a".to_string(), 1);
map.insert("a".to_string(), 2);
map.insert("b".to_string(), 3);
assert_eq!(map.get("a").unwrap().len(), 2);
assert_eq!(map.get("b").unwrap().len(), 1);
MultiSet
MultiSet
是对 Map<V, usize>
的包装。它提供集合的语义,但允许重复值。它提供遍历唯一 (&V, usize)
和非唯一 &V
的迭代器。
use multi_containers::HashMultiSet;
let mut set = HashMultiSet::new();
set.insert(1);
set.insert(1);
set.insert_some(2, 3);
assert_eq!(set.count(&1), 2);
assert_eq!(set.count(&2), 3);
许可证:MIT