插入或修改HashSet内容

问题描述 投票:0回答:1
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,但不知道如何实现。

rust hashset
1个回答
0
投票

这将计算 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)
}
© www.soinside.com 2019 - 2024. All rights reserved.