Rust HashMap查找并删除最小值

hmae6n7t  于 2024-01-08  发布在  其他
关注(0)|答案(1)|浏览(113)

我有一个HashMap<(usize,usize),Point3d>,我想根据某个度量删除最小元素。

let closest_edge = {
            let edges = exterior.keys();
            edges.reduce(|k1:&(usize,usize),k2:&(usize,usize)|-> &(usize,usize) {
                // return minimal value
            }).unwrap()
        };

        exterior.remove(closest_edge);

字符串
然而,我不能删除最小边,因为在从exterior获取键时,借用是不可变的。具体来说,这是我的错误:

cannot borrow `exterior` as mutable because it is also borrowed as immutable


有没有一种习惯的方法来编写一个重新 Shuffle 的队列?
Queue不起作用,因为我想要最小的元素,而不是最老的元素。
retain也不起作用,因为我需要知道最小距离是多少,而且我只想删除一个元素。
PriorityQueue也不完全正确,因为优先级可能会随着回合的不同而变化。(每一回合我都想找到一条最接近我正在观察的点的边,所以距离函数每次都会变化)

qij5mzcb

qij5mzcb1#

因为你的键是Copy,你可以通过解引用来复制它,这样它就不会从map中借用。

let closest_edge = {
    let edges = exterior.keys();
    // Dereference *
    *edges.reduce(|k1:&(usize,usize),k2:&(usize,usize)|-> &(usize,usize) {
        // return minimal value
    }).unwrap()
};

// Make temporary reference &
exterior.remove(&closest_edge);

字符串

相关问题