struct A<T> {
data: T,
count: usize,
}
struct B<T> {
set: HashSet<A<T>>,
}
impl<T> B<T> {
fn add(&mut self, data: T) -> &A<T> {
let a = A {
data,
count: 1,
};
//
todo!()
}
}
实现 B.add ,尝试将 a 添加到 self.set(如果已经存在)。加上A.count,尽量减少查询或插入。
我尝试过 HashSet.get_or_insert,但不知道如何实现。
这将计算 HashMap 中插入了多少个键。这是你想要实现的目标吗?
use std::collections::HashMap;
use core::hash::Hash;
struct B<T: Eq + Hash> {
map: HashMap<T, usize>,
}
impl<T: Eq + Hash> B<T> {
fn new() -> B<T> {
B {
map: HashMap::new()
}
}
fn add(&mut self, key: T) -> usize {
*self.map.entry(key).and_modify(|c| *c += 1).or_insert(1)
}
fn get(&self, key: T) -> usize {
*self.map.get(&key).unwrap_or(&0)
}
}
fn main() {
let mut b = B::new();
assert_eq!(b.get("test"), 0);
b.add("test");
b.add("test");
assert_eq!(b.get("test"), 2);
b.add("test");
assert_eq!(b.get("test"), 3)
}