- cost(Hash_table) >> cost(direct_lookup_table)
- cost(direct_lookup_table) ~= cost(switch) if your compiler translates switches into lookup tables.
- cost(switch) >> cost(direct_lookup_table) (O(N) vs O(1)) if your compiler does not translate switches and use conditionals, but I can't think of any compiler doing this.
- But inlined direct threading makes the code less readable.