我有两个HashMap(playground):
如何检查两个映射
"相同" 意味着满足以下所有条件。
我已经阅读了 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
是否相同?"相同" 意味着满足以下所有条件。
键的类型相同。
值的类型相同。
两个映射具有完全相同的键集。插入顺序不应该影响结果。
每个键的两个映射都具有完全相同的值(即对于每个现有键
k
,m1.get(k) == m2.get(k)
)。
m1 == m2
即可实现此功能。但是,这种行为是否得到保证?我想要某种保证(因此我添加了 #language-lawyer
标签)。我已经阅读了 HashMap 的官方文档。
另外,
HashSet
和 Vec
呢?(我也阅读了它们的文档。)
HashMap
中使用==
实现的PartialEq
的方式可以保证你想要的结果。它会迭代地检查每个映射条目,检查另一个映射是否有该条目,并且值是否相等。 来源 - Bamontaneq
,它只是遍历整个切片并检查所有值是否相等:来源(如果T是按位可比较的,则有其他实现,因此它可以直接调用memcmp
),对于Set,它遍历键并检查另一个集合是否有它:来源。 - Bamontan