[英]How to get the maximum and minimum value of an ordered set / ordered map?
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
。
由於集合和 map 是有序的,因此應該有一種方法可以獲取包含的最大和最小元素。 你怎么得到它們?
此類型沒有最大或最小成員方法(繼承或來自 trait)。
在 O(log(n)) 中訪問此信息的最佳方式是直接使用迭代器,正如開發團隊在 GitHub 的issue 31690中提到的那樣:
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()
問題 59947 有一個基准,顯示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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.