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