Ein kürzlich unordered_map
in C ++ veröffentlichter Vortrag hat mir klar gemacht, dass ich ihn aufgrund der Effizienz der Suche ( amortisiertes O (1) vs. O (log n) ) unordered_map
für die meisten Fälle verwenden sollte, in denen ich ihn map
zuvor verwendet habe . Meistens verwende ich eine Karte, entweder oder als Schlüsseltyp. Daher habe ich keine Probleme mit der Definition der Hash-Funktion. Je mehr ich darüber nachdachte, desto mehr wurde mir klar, dass ich bei Schlüsseln mit einfachen Typen keinen Grund finden kann, ein Over-A zu verwenden. Ich habe mir die Schnittstellen angesehen und keine gefunden signifikante Unterschiede, die sich auf meinen Code auswirken würden.int
std::string
std::map
std::unordered_map
Daraus ergibt sich die Frage: Gibt es eine wahre Grund für die Verwendung std::map
über std::unordered_map
im Fall von einfachen Typen wie int
und std::string
?
Ich frage aus rein programmtechnischer Sicht - ich weiß, dass es nicht vollständig als Standard betrachtet wird und dass es Probleme mit der Portierung geben kann.
Außerdem erwarte ich, dass eine der richtigen Antworten "es ist effizienter für kleinere Datensätze" aufgrund eines geringeren Overheads ist (stimmt das?) - daher möchte ich die Frage auf Fälle beschränken, in denen die Menge von Schlüssel sind nicht trivial (> 1 024).
Edit: duh, ich habe das Offensichtliche vergessen (danke GMan!) - ja, Karten sind natürlich bestellt - das weiß ich und suche nach anderen Gründen.