Niedawna rozmowa unordered_map
w C ++ uświadomiła mi, że powinienem używać tego unordered_map
w większości przypadków, w których map
wcześniej go użyłem , ze względu na efektywność wyszukiwania ( zamortyzowane O (1) vs. O (log n) ). Najwięcej razy używam mapę, używam albo int
czy std::string
jako kluczowy typu; stąd nie mam problemów z definicją funkcji skrótu. Im dłużej o tym myślałem, tym bardziej zdawałem sobie sprawę, że nie mogę znaleźć żadnego powodu, aby użyć std::map
over a std::unordered_map
w przypadku kluczy o prostych typach - spojrzałem na interfejsy i nie znalazłem żadnego znaczące różnice, które wpłynęłyby na mój kod.
Stąd pytanie: czy jest jakiś prawdziwy powód do korzystania std::map
w ciągu std::unordered_map
w przypadku typów prostych, jak int
i std::string
?
Pytam z ściśle programistycznego punktu widzenia - wiem, że nie jest to w pełni uważane za standardowe i może powodować problemy z portowaniem.
Spodziewam się również, że jedna z poprawnych odpowiedzi może brzmieć „jest bardziej wydajna dla mniejszych zestawów danych” z powodu mniejszego obciążenia (czy to prawda?) - dlatego chciałbym ograniczyć pytanie do przypadków, w których ilość klucze są nietrywialne (> 1 024).
Edycja: duh, zapomniałem oczywistości (dzięki GMan!) - tak, mapy są oczywiście uporządkowane - wiem o tym i szukam innych powodów.