我打算在C ++中使用两个类型为std::map<char, Node>
的地图,其中Node
是一个自定义类。假设我有两张上述类型的地图m1
和m2
,我想知道m1
是否包含m2
中存在的所有键。换句话说,我想验证m1
和m2
的一组键的交集是否与m2
的键集相同。
我可以遍历m2
中的所有密钥并在find()
上执行count()
或m1
,但这似乎是浪费,可能会很慢。我这样说是因为密钥在std::map
中按排序顺序存储为二叉搜索树,因此每个查找/计数将采用O(logn),而对于m2
中的下一个密钥,必须从头开始遍历m1
键中相同的路径。
我是STL的新手,所以请原谅我对看似应该容易做到的事情的无知。此外,一些简单的示例代码片段或代码片段链接将非常有助于更好地理解。我不能使用非标准库,包括boost。
提前致谢!
答案 0 :(得分:5)
由于map
的键被排序,您可以同时迭代它们并将键相互比较。如果key(m1) < key(m2)
,则递增m1的迭代器;如果key(m2) < key(m1)
则m2包含不在m1中的密钥。
这是O(n)。