Jer*_*hoy 5 b-tree rust ordered-map ordered-set
Rust 的有序集是一个BTreeSet:
Run Code Online (Sandbox Code Playgroud)use std::collections::BTreeSet; // Type inference lets us omit an explicit type signature (which // would be `BTreeSet<&str>` in this example). let mut books = BTreeSet::new(); // Add some books. books.insert("A Dance With Dragons"); books.insert("To Kill a Mockingbird"); books.insert("The Odyssey"); books.insert("The Great Gatsby");
有序映射是一个BTreeMap.
由于 set 和 map 是有序的,因此应该有一种方法可以获取包含的最大和最小元素。你怎么得到它们?
Jer*_*hoy 10
这种类型没有最大或最小成员方法(固有的或来自特征的)。
在 O(log(n)) 中访问此信息的最佳方法是直接使用迭代器,正如开发团队在GitHub 的 issue 31690 中提到的:
let map: BTreeSet<V> = ...;
let min = map.iter().next();
let max = map.iter().next_back();
Run Code Online (Sandbox Code Playgroud)
您可以使用Iterator::max()和Iterator::min()方法获取集合的最大值和最小值,但使用有序集合执行此操作将浏览整个集合,忽略我们从订单中获得的信息。
// This will be very slow
map.iter().max()
map.iter().min()
Run Code Online (Sandbox Code Playgroud)
问题 59947 有一个基准,显示了以下两种选择BTreeMap:
Run Code Online (Sandbox Code Playgroud)// This will be very slow map.iter().max() map.iter().min()