Я планирую использовать две карты в 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.
Заранее спасибо!
Так как ключи map
отсортированы, вы можете перебирать их обоих одновременно и сравнивать ключи друг с другом. Если key(m1) < key(m2)
, увеличить итератор для m1; если key(m2) < key(m1)
тогда m2 содержит ключ не в m1.
Это O (n).
Других решений пока нет …