Ce face BTreeMap::first_key_value
Pentru că un BTreeMap este sortat, cea mai mică și cea mai mare cheie se găsesc imediat. first_key_value() și last_key_value() le returnează, împreună cu valorile, ca Option<(&K, &V)>.
Pentru a le și scoate din dicționar există pop_first() și pop_last() (Rust 1.66), care returnează Option<(K, V)>. Așa, un BTreeMap poate servi și drept coadă de priorități în care poți căuta după cheie.
Ce returnează
Some((&cheie, &valoare)) sau None.
Exemple
Exemplul 1: Scorul minim și maxim
use std::collections::BTreeMap;
fn main() {
let scoruri = BTreeMap::from([(85, "Mihai"), (97, "Ana"), (72, "Radu"), (91, "Ioana")]);
println!("{:?}", scoruri.first_key_value());
println!("{:?}", scoruri.last_key_value());
if let Some((scor, nume)) = scoruri.last_key_value() {
println!("câștigă {nume} cu {scor} puncte");
}
let gol: BTreeMap<u32, &str> = BTreeMap::new();
println!("gol: {:?}", gol.first_key_value());
}
Rezultat
Some((72, "Radu"))
Some((97, "Ana"))
câștigă Ana cu 97 puncte
gol: None
Exemplul 2: Podiumul, cu pop_last
use std::collections::BTreeMap;
fn main() {
let mut scoruri = BTreeMap::from([(85, "Mihai"), (97, "Ana"), (72, "Radu"), (91, "Ioana")]);
for loc in 1..=3 {
if let Some((scor, nume)) = scoruri.pop_last() {
println!("locul {loc}: {nume} ({scor})");
}
}
println!("rămas: {:?}", scoruri);
}
Rezultat
locul 1: Ana (97)
locul 2: Ioana (91)
locul 3: Mihai (85)
rămas: {72: "Radu"}
Greșeli frecvente
- Folosești
iter().next()șiiter().last(): merg, darlast()parcurge tot.last_key_value()e direct. - Chei egale nu pot exista: dacă doi elevi au același scor, al doilea
insertîl înlocuiește pe primul. Folosește cheia(scor, nume)sau valori de tipVec.
Comenzi înrudite
BTreeMap: Dicționar cu cheile mereu sortate: aceleași operații ca HashMap, dar parcurgerea și afișarea sunt în ordinea cheilor.BTreeSet::first: Returnează cel mai mic (first) sau cel mai mare (last) element al mulțimii sortate; None dacă e goală.BTreeMap::range: Parcurge doar perechile cu cheile într-un interval (a..b, a..=b, a.., ..b), în ordine crescătoare.BinaryHeap: Coadă de priorități: pop scoate mereu cel mai mare element, iar peek îl arată fără să-l scoată.