如何解决如何获取将用于 BTreeMap 中的值的哈希
我目前正在使用 BTreeMap
,因为我需要稳定的排序。
是否有 Rust Map 结构可以让我暂时将新键/值添加到有序 Map 并查看散列是什么?
目前我必须克隆整个 BTreeMap
,添加键/值,获取散列并删除克隆。这看起来很浪费。
解决方法
假设您谈论的是由其 Hash::hash
方法返回的整棵树的哈希值,那么您可以看到它是 implemented like this:
fn hash<H: Hasher>(&self,state: &mut H) {
for elt in self {
elt.hash(state);
}
}
可以简单地修改以虚拟插入元素:
fn hash_with_extra<H: Hasher>(map: &BTreeMap<i32,i32>,state: &mut H,extra: &(i32,i32)) {
let mut it = map.iter();
let mut done = false;
while let Some (elt) = it.next() {
if extra.0 == elt.0 {
extra.hash (state);
done = true;
break;
} else if extra.0 < elt.0 {
extra.hash (state);
elt.hash (state);
done = true;
break;
} else {
elt.hash (state);
}
}
if done {
while let Some (elt) = it.next() { elt.hash (state); }
} else {
extra.hash (state);
}
}
或者使用 itertools::merge
和 std::iter::once
:
fn hash_with_extra<H: Hasher>(map: &BTreeMap<i32,i32)) {
for elt in merge (map.iter(),once (extra)) {
elt.hash (state);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。