#![allow(unused_variables)] #![feature(btree_set_entry)] fn main() { use std::collections::BTreeSet; use std::collections::btree_set::Entry::*; let mut singles = BTreeSet::new(); let mut dupes = BTreeSet::new(); for ch in "a short treatise on fungi".chars() { if let Vacant(dupe_entry) = dupes.entry(ch) { match singles.entry(ch) { Vacant(single_entry) => single_entry.insert(), Occupied(single_entry) => { single_entry.remove(); dupe_entry.insert(); } } } } assert!(! singles.contains(&'t') && dupes.contains(&'t')); assert!(singles.contains(&'u') && ! dupes.contains(&'u')); assert!(! singles.contains(&'v') && ! dupes.contains(&'v')); }