Z czego wynika popularność std::map aka drzewo czerwono-czarne? Praktycznie zawsze, gdy robię benchmarki mapa jest wolniejszy od jakiegoś innego kontenera. Często widzę, że polecana jest jako "lookup table", gdzie hashMapa wydaje się być dużo lepsza. Czy byłby ktoś w stanie wskazać jakiś przypadek, gdzie std::map dobrze się sprawdza? Pytanie nie dotyczy narzutu pamięci. #cpp
@Malkof: Chyba jedyna zaleta to, że jest posortowana i można szukać zakresu wartości, albo n.p. można wyszukać najdłuższy prefix. Dla wszyskich innych przypadków gdzie kolejność po kluczu nie ma znaczenia, to dobra implementacja unsorted_map będzie znacząco szybsza.
A jeżeli kolejność się liczy, to są przypadki gdzie posortowany std::vertor będzie szybszy, chociaż chyba jest coś, co się nazywa flat_map co działa podobnie (szybkie przeglądanie na przedziale iteratorów; implementacja jest chyba w booście).
@Malkof: Chociaż pytanie było, dlaczego jest popularna? Bo jest przeciętnie dobra dla większości przypadków i nie trzeba się zastanawiać nad implementacją, no i fakt, że kiedyś std::unsorted_map nie istniało, więc każdy używał std::map z braku alternatyw w standardowej bibliotece.
@lionbest: @Passer93: Już kilka razy spotkałem się, że na reddicie/stackoverflow ktoś pisał o tym, jak mapa jest wspaniała, a w projekcie nad którym pracuje stosunek użycia hashMapy do mapy to 1:53(sic). Dobrze wiedzieć, że jednak nie zwariowałem.
Czy byłby ktoś w stanie wskazać jakiś przypadek, gdzie std::map dobrze się sprawdza?
Pytanie nie dotyczy narzutu pamięci.
#cpp
unsorted_mapbędzie znacząco szybsza.A jeżeli kolejność się liczy, to są przypadki gdzie posortowany std::vertor będzie szybszy, chociaż chyba jest coś, co się nazywa
flat_mapco działa podobnie (szybkie przeglądanie na przedziale iteratorów; implementacja jest chyba w booście).std::unsorted_mapnie istniało, więc każdy używałstd::mapz braku alternatyw w standardowej bibliotece.Dobrze wiedzieć, że jednak nie zwariowałem.