Недавний разговор о unordered_map
в C++ заставил меня понять, что я должен использовать unordered_map
для большинства случаев, когда я использовал map
раньше, из-за эффективности поиска (амортизированный O (1) и O (log n) )). В большинстве случаев я использую карту, в качестве типа ключа я использую либо int
, либо std::string
; следовательно, у меня нет проблем с определением хеш-функции. Чем больше я думал об этом, тем больше осознавал, что не могу найти никакой причины использовать std::map
над std::unordered_map
в случае ключей с простыми типами - я взглянул на интерфейсы, и не нашел каких-либо существенных различий, которые повлияют на мой код.
Отсюда вопрос: есть ли реальная причина использовать std::map
вместо std::unordered map
в случае простых типов, таких как int
и std::string
?
Я спрашиваю со строгой точки зрения программирования - я знаю, что это не полностью считается стандартом, и что это может создать проблемы с портированием.
Кроме того, я ожидаю, что один из правильных ответов может быть "он более эффективен для небольших наборов данных" из-за меньших издержек (это правда?) - поэтому я хотел бы ограничить вопрос случаями, когда количество Ключи нетривиальны (> 1 024).
Редактировать: да, я забыл очевидное (спасибо GMan!) - да, карты, конечно, заказаны - я знаю это, и ищу по другим причинам.