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