Ce face BTreeSet::first
first() și last() dau imediat minimul și maximul mulțimii, ca Option<&T>. Nu modifică mulțimea.
pop_first() și pop_last() scot elementul și îl returnează ca Option<T>. Cu ele, un BTreeSet devine o coadă de priorități fără duplicate, din care poți scoate atât minimul, cât și maximul.
Ce returnează
Some(&element) sau None.
Exemple
Exemplul 1: Nota cea mai mică și cea mai mare
use std::collections::BTreeSet;
fn main() {
let note: BTreeSet<u32> = [7, 10, 5, 9, 10, 7].into();
println!("note distincte: {:?}", note);
println!("minim: {:?}, maxim: {:?}", note.first(), note.last());
let goala: BTreeSet<u32> = BTreeSet::new();
println!("mulțime goală: {:?}", goala.first());
}
Rezultat
note distincte: {5, 7, 9, 10}
minim: Some(5), maxim: Some(10)
mulțime goală: None
Exemplul 2: Sarcini procesate în ordinea priorității
Elementele sunt tupluri (prioritate, nume); prioritatea 1 este cea mai urgentă, deci o scoatem cu pop_first.
use std::collections::BTreeSet;
fn main() {
let mut sarcini = BTreeSet::new();
sarcini.insert((3, "actualizează documentația"));
sarcini.insert((1, "repară autentificarea"));
sarcini.insert((2, "răspunde clientului"));
println!("urmează: {:?}", sarcini.first());
while let Some((p, s)) = sarcini.pop_first() {
println!("[{p}] {s}");
}
}
Rezultat
urmează: Some((1, "repară autentificarea"))
[1] repară autentificarea
[2] răspunde clientului
[3] actualizează documentația
Greșeli frecvente
- Folosești
iter().min()pe unBTreeSet: merge, darfirst()e direct și mai clar. - Pui două sarcini cu exact aceeași prioritate și același nume: mulțimea păstrează una singură.
Comenzi înrudite
BTreeSet: Mulțime cu elementele mereu sortate: fără duplicate, ca HashSet, dar parcurgerea este în ordine crescătoare.BTreeMap::first_key_value: Returnează perechea cu cea mai mică cheie (first) sau cu cea mai mare cheie (last); None dacă dicționarul e gol.BinaryHeap: Coadă de priorități: pop scoate mereu cel mai mare element, iar peek îl arată fără să-l scoată.Vec::first: first returnează primul element, last ultimul, ca Option: None dacă vectorul este gol.