Ich habe hier Antworten für bestimmte Sprachen gesehen, über Switches mit mehr als 5 Fällen, die mit Sprungtabellen optimiert wurden, um eine konstante Zugriffszeit für jeden Fall zu garantieren.
Ist das so für C / C ++?
Ist es insbesondere für gcc? für visuelles Studio?
Falls nicht, helfen Sortierfälle in der Reihenfolge der Häufigkeit des Auftretens?
Der Standard garantiert nicht, wie die switch-Anweisung implementiert wird. Ich habe noch nie einen Compiler gesehen, der eine Hash-Tabelle erzeugt, obwohl einige eine Sprungtabelle erzeugen werden. Wenn mein Gedächtnis nicht schlechter arbeitet als gewöhnlich, können sowohl VS als auch gcc Sprungtabellen erzeugen, wenn die Fälle ausreichend dicht sind (für unterschiedliche Werte von "ausreichend"). Leider ist es fast unmöglich zu sagen (oder notwendigerweise sogar herauszufinden), wenn die Sortierung nach Häufigkeit des Auftretens helfen wird - es ist nicht nur zwischen Compilern, sondern auch zwischen verschiedenen Versionen desselben Compilers anders.
c (und durch Erweiterung c ++) schaltet nur ganzzahlige Typen ein, so dass Hashing nicht notwendig ist. Der Compiler verwendet normalerweise ein Idiom, das der Architektur entspricht, für die Sie kompilieren. Dies könnte eine indizierte Adressierung sein (wenn ein kleiner Bereich verwendet wird), Sprungtabellen oder etwas völlig anderes.
Das wird der Compiler für Sie tun. Im Fall von GCC wird es eine Sprungtabelle verwenden.
Ein Hash scheint keine effiziente Methode zu sein, einen Switch zu implementieren, weil Sie aufgrund der Suche zusätzliche Cache-Fehler haben werden.
Tags und Links optimization c c++ switch-statement