stl — Проверьте, содержит ли карта в C ++ все ключи от другой карты

Я планирую использовать две карты в C ++, типа: std::map<char, Node>, где Node это пользовательский класс. Предположим, у меня есть две карты, m1 а также m2 типа выше, я хочу выяснить, m1 содержит все ключи присутствуют в m2, Другими словами, я хочу убедиться, что пересечение набора ключей m1 а также m2 такой же, как набор ключей m2,

Я мог бы перебрать все ключи в m2 и сделать find() или же count() на m1, но это кажется пустой тратой и, вероятно, будет медленным. Я говорю это потому, что ключи хранятся в виде двоичного дерева поиска в отсортированном порядке в std::map, и поэтому каждый из find / count будет принимать O (logn), а для следующего ключа m2, тот же путь в ключах m1 придется проходить с самого начала.

Я новичок в STL, поэтому, пожалуйста, прости мое невежество в отношении того, что кажется легко выполнимым. Кроме того, некоторые простые примеры фрагментов кода или ссылки на фрагменты кода будут очень полезны для лучшего понимания. Я не могу использовать нестандартные библиотеки, в том числе boost.

Заранее спасибо!

7

Решение

Так как ключи map отсортированы, вы можете перебирать их обоих одновременно и сравнивать ключи друг с другом. Если key(m1) < key(m2), увеличить итератор для m1; если key(m2) < key(m1) тогда m2 содержит ключ не в m1.

Это O (n).

5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]