Нещодавно розмова про 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!) - так, карти замовлені звичайно - я це знаю, і шукаю інші причини.