Rust 中如何检查两个 HashMap 是否相同?

问题描述 投票:0回答:1

我有两个

HashMap
游乐场):

let mut m1: HashMap<u8, usize, _> = HashMap::new();
m1.insert(1, 100);
m1.insert(2, 200);

let mut m2: HashMap<u8, usize, _> = HashMap::new();
m2.insert(2, 200);
m2.insert(1, 100);

如何检查两张地图

m1
m2
是否相同?

“相同”是指满足以下条件所有

  • 按键类型相同。

  • 值的类型相同。

  • 两张地图具有完全相同的按键集。插入顺序无关紧要。

  • 两个映射的每个键都具有完全相同的值(即

    m1.get(k) == m2.get(k)
    对于每个现有键
    k
    )。

据我测试,只有

m1 == m2
有效。然而,这种行为有保证吗?我想要某种保证(因此我添加了
#language-lawyer
标签)。

我已经阅读了HashMap的官方文档

另外,

HashSet
Vec
呢? (我也阅读了他们的文档。)

rust hashmap language-lawyer
1个回答
4
投票

查看std库的源码,你可以找到

PartialEq
对于那些不同集合的实现:

  • HashMap
    迭代所有键/值对并检查另一个映射是否具有该键的对应条目,然后检查值是否相等:source
  • HashSet
    迭代键并检查其他集合是否包含该键:source
  • Vec
    实际上在底层切片上调用
    eq
    ,其中之一是:
    • 迭代所有值并比较它们:source
    • 或者如果类型允许,通过调用
      memcmp
      source
    • 进行按位比较

我不知道是否有任何形式的保证这种行为永远不会改变,但由于稳定,广泛使用 API,我认为它们永远不会改变。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.