7

我打算在 C++ 中使用两个映射,类型为:std::map<char, Node>Node自定义类在哪里。假设我有两个映射,m1并且是上述类型,m2想找出是否m1包含. 换句话说,我想验证 和 的键集的交集与 的键集相同。m2m1m2m2

我可以遍历所有键 inm2并执行 a find()or count()on m1,但这似乎是一种浪费,而且可能会很慢。我这样说是因为键在 an 中按排序顺序存储为二叉搜索树std::map,因此每个 find/count 将采用 O(logn),对于 中的下一个键,键中m2的相同路径m1必须从头开始遍历。

我是 STL 的新手,所以请原谅我对似乎应该很容易做到的事情的无知。此外,一些简单的示例代码片段或指向代码片段的链接将非常有助于更好地理解。我不能使用非标准库,包括 boost。

提前致谢!

4

1 回答 1

5

由于 a 的键map已排序,因此您可以同时遍历它们并相互比较键。如果key(m1) < key(m2),增加 m1 的迭代器;如果key(m2) < key(m1)然后 m2 包含不在 m1 中的键。

这是 O(n)。

于 2012-10-08T03:59:57.273 回答