簡體   English   中英

如何獲得有序集/有序map的最大值和最小值?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM