BTreeSet::first în Rust

Returnează cel mai mic (first) sau cel mai mare (last) element al mulțimii sortate; None dacă e goală.

Sintaxă
pub fn first(&self) -> Option<&T>
pub fn last(&self) -> Option<&T>

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 un BTreeSet: merge, dar first() 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.