检查C++中的映射是否包含其他映射中的所有键

Check if map in C++ contains all the keys from another map

本文关键字:映射 其他 是否 C++ 检查 包含      更新时间:2023-10-16

我计划在C++中使用两个类型为std::map<char, Node>的映射,其中Node是一个自定义类。假设我有两个映射,上面类型的m1m2,我想知道m1是否包含m2中存在的所有密钥。换句话说,我想验证m1m2的密钥集的交集与m2的密钥集相同。

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

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

提前感谢!

由于map的键是排序的,因此您可以同时遍历这两个键,并将键相互比较。如果key(m1) < key(m2),则递增m1的迭代器;如果CCD_ 19,则m2包含不在m1中的密钥。

这就是O(n)。