Rust订购的套装是BTreeSet:

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");

有序 map 是BTreeMap.

因为集合和映射是有序的,所以应该有一种方法来获得包含的最大和最小元素.你怎么弄到的?

推荐答案

对于这种类型,没有最大或最小成员方法(固有或来自特征).

在O(log(n))中访问此信息的最佳方法是直接使用迭代器,正如开发团队在issue 31690 from GitHub中提到的:

let map: BTreeSet<V> = ...;
let min = map.iter().next();
let max = map.iter().next_back();

您可以使用Iterator::max()Iterator::min()方法获得集合的最大值和最小值,但使用有序集合进行此操作将浏览整个集合,而忽略我们从订单中获得的信息.

// This will be very slow
map.iter().max()
map.iter().min()

Issue 59947 has a benchmark显示BTreeMap的两个备选方案:

test bench_first ... bench:           9 ns/iter (+/- 0)
test bench_last  ... bench:           8 ns/iter (+/- 0)
test bench_max   ... bench:       3,603 ns/iter (+/- 536)
test bench_min   ... bench:       3,755 ns/iter (+/- 328)

Rust相关问答推荐

如何定义使用拥有的字符串并返回拥有的Split的Rust函数?

如何从铁 rust 中呼唤_mm_256_mul_ph?

具有对同一类型的另一个实例的可变引用的

如何编写一个以一个闭包为参数的函数,该函数以另一个闭包为参数?

如何计算迭代器适配器链中过滤的元素的数量

一种随机局部搜索算法的基准(分数)

对于已经被认为是未定义行为的相同数据,纯粹存在`&;[u32]`和`&;mut[u32]`吗?

定义只有一些字段可以缺省的 struct

对reqwest提供的这种嵌套JSON struct 进行反序列化

当我编译 Rust 代码时,我是否缺少 AVX512 的目标功能?

如何返回 struct 体中向量的切片

Rust并发读写引起的死锁问题

str 和 String 的 Rust 生命周期

在构建器模式中捕获 &str 时如何使用生命周期?

如何将 Rust 字符串转换为 i8(c_char) 数组?

如果我不想运行析构函数,如何移出具有析构函数的 struct ?

实现不消费的迭代器

有没有更好的方法来为拥有 DIsplay 事物集合的 struct 实现 Display?

将数据序列化为 struct 模型,其中两个字段的数据是根据 struct 中的其他字段计算的

`if let` 只是另一种编写其他 `if` 语句的方式吗?