#collection #map #set #iterator

nightly std_collection_traits

std集合类型操作抽象

2个版本

0.1.2 2021年8月17日
0.1.1 2021年8月16日

1454数据结构

MIT 协议

92KB
2K SLoC

Rust 集合特性

std 集合中抽象出常见操作。有关工作示例,请查看 tests/group_by.rs

此包是实验性的。最好需要一个 RFC 来正式抽象操作(如 Cpp Concept/Named requirements)。

std 中的集合

  • 切片:&[T]&mut [T]
  • 数组:[T; N]
  • 序列:Vec<T>VecDeque<T>LinkedList<T>
  • 集合:BTreeSet<T>HashSet<T>
  • 映射:BTreeMap<T>HashMap<T>
  • 杂项:BinaryHeap<T>

一般分类

  • Collection:所有集合,不包括关联的集合。
    • AllocatorAwareCollection:感知分配器的集合,目前只有 Vec<T, A>
    • CapacityAwareCollection:感知容量的集合,你可以为它们预留,用指定的容量创建。例如 HashSet::with_capacity
    • ContiguousCollection:连续集合,就像内存的连续区域。例如 Vec::as_slice
    • SequentialCollection:顺序集合,你可以单向遍历它,并在末尾进行修改。例如:VecDeque::push_back
    • DoubleEndedCollection:双端集合,你可以在两端执行类似顺序的操作。例如:LinkedList<T>::pop_front
    • RandomAccessCollection:随机访问集合,你可以通过索引进行访问。例如:VecDeque<T>::get
  • 关联集合
    • AssociatedCapacityAwareCollection:具有容量感知的关联集合。
    • Set<S>:类似集合的集合,HashSet<K, S>BTreeSet<K>
    • OrderedSe<S>:有序集合,例如:BTreeSet<K>
    • Map<S>:类似映射的集合,例如:HashMap<K, V, S>BTreeMap<K, V>
    • OrderedMap<S>:有序映射,例如:BTreeMap<K, V>
  • 其他杂项操作
    • RetainableAssocaitedRetainable:保留特定元素的能力。
    • Contains:测试元素是否在序列中的能力。
    • DrainFull/DrainRange/{Associated}DrainFilter:在不丢弃原始集合的情况下,能够排放特定数量的元素的能力。
    • Range/RangeMut:生成原始序列视图的能力。

待办事项

  • 根据Mut/Own标记重新编写,而不是单独的类型
    • 这需要在默认实现上使用一些非健壮的unreached_unchecked
  • 找到一种方法来约束泛型关联迭代器类型
    • ExactSizedIterator
    • TrustedRandomAccess
    • DoubleEndedIterator
    • 仍然无法将要求传播到最高特质
  • 添加更多类似集合的类型,如 &strString
  • 将所有内容重写为关联类型

无运行时依赖