检查C ++中的map是否包含来自另一个映射的所有键

时间:2012-10-08 03:45:10

标签: c++ stl map set intersection

我打算在C ++中使用两个类型为std::map<char, Node>的地图,其中Node是一个自定义类。假设我有两张上述类型的地图m1m2,我想知道m1是否包含m2中存在的所有键。换句话说,我想验证m1m2的一组键的交集是否与m2的键集相同。

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

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

提前致谢!

1 个答案:

答案 0 :(得分:5)

由于map的键被排序,您可以同时迭代它们并将键相互比较。如果key(m1) < key(m2),则递增m1的迭代器;如果key(m2) < key(m1)则m2包含不在m1中的密钥。

这是O(n)。