我说的是std::collections::hash_map::Values结构体,它是.values()通过在HashMap. 这个结构真的让我感到困惑,如何在不迭代它们的情况下访问它的值?我想把这些值变成BinaryHeap这样:
let heap = BinaryHeap::from(map.values());
Run Code Online (Sandbox Code Playgroud)
我阅读了文档,似乎这个结构并没有真正访问其元素的简单方法
该Values结构定义为
HashMap 值的迭代器。
但是,有一种简单的方法可以将值转换为BinaryHeap. 既然它实现了FromIterator,你可以做
let heap: BinaryHeap<_> = map.values().collect();
Run Code Online (Sandbox Code Playgroud)
上面的代码将创建一个BinaryHeap引用。如果您希望堆拥有这些值,您可以像这样将值移出地图:
let heap: BinaryHeap<_> = map.drain().map(|(_key, value)| value).collect();
Run Code Online (Sandbox Code Playgroud)
或克隆值:
let heap: BinaryHeap<_> = map.values().cloned().collect();
Run Code Online (Sandbox Code Playgroud)
请注意,如果您的值类型是Copy(如i32),您可以调用.copied()而不是.cloned(). 这不会加快过程,但它是更准确和更好的做法。