Ein kürzlich unordered_mapin C ++ veröffentlichter Vortrag hat mir klar gemacht, dass ich ihn aufgrund der Effizienz der Suche ( amortisiertes O (1) vs. O (log n) ) unordered_mapfür die meisten Fälle verwenden sollte, in denen ich ihn mapzuvor 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.intstd::stringstd::mapstd::unordered_map
Daraus ergibt sich die Frage: Gibt es eine wahre Grund für die Verwendung std::mapüber std::unordered_mapim Fall von einfachen Typen wie intund 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.

