Mam zamiar użyć dwóch map w C++, typu: std::map<char, Node>
, gdzie Node
jest klasą niestandardową. Załóżmy, że mam dwie mapy: m1
i m2
powyższego typu, chcę się dowiedzieć, czyzawiera wszystkie klucze obecne w m2
. Innymi słowy, chcę sprawdzić, czy przecięcie zestawu kluczy o numerach m1
i m2
jest takie samo jak zestawu kluczy o numerze m2
.Sprawdź, czy mapa w C++ zawiera wszystkie klucze z innej mapy
mogę iteracyjne nad wszystkie klucze w m2
i zrobić find()
lub count()
na m1
, ale to wydaje się jak odpad i będzie prawdopodobnie powolny. Mówię to, ponieważ klucze są przechowywane jako drzewo wyszukiwania binarnego w porządku posortowanym w std::map
, a więc każde z wyszukiwań/zliczeń zajmuje O (logn), a dla następnego klucza w m2
, ta sama ścieżka w kluczach m1
będzie musiał przejść od samego początku.
Jestem nowy w STL, więc proszę wybaczyć moją niewiedzę na temat tego, co wydaje się czymś, co powinno być łatwe do wykonania. Ponadto niektóre proste przykładowe fragmenty kodu lub odsyłacze do fragmentów kodu będą bardzo pomocne w lepszym zrozumieniu. Nie mogę używać niestandardowych bibliotek, w tym doładowania.
Z góry dziękuję!
To jest ładne - podobnie do scalania algorytmu do sortowania list. Dzięki! – Paresh
To jest Θ (m2 + m1), podczas gdy pierwotny algorytm to Θ (m2 * log (m1)) (nazwy rozmiarów po ich mapie). To, czy jest to lepsze, zależy od wielkości 'm1' w stosunku do' m2' ... –