Часто мне нужно выбрать, что делать в соответствии со значением элемента константы, отличного от POD, примерно так:
switch( str ) {
case "foo": ...
case "bar": ...
default: ...
}
Печально switch
может использоваться только с целыми числами: error: switch quantity not an integer
.
Самый тривиальный способ реализовать такую вещь - значит, это последовательность if
s:
if( str == "foo" ) ...
else if( str == "bar" ) ...
else ...
Но это решение выглядит грязным и должно стоить O (n), где n - количество случаев, тогда как эта часть кода может стоить O (log n) в худшем случае с двоичным поиском.
Используя некоторые структуры данных (например, Карты), можно получить целое число, представляющее строку (O (log n)), а затем использовать O (1) switch
или реализовать статическую двоичную сортировку путем правильного вложения if
, но все же эти хаки потребуют много кодирования, делая все более сложным и сложным для поддержания.
Какой лучший способ сделать это? (быстрый, чистый и простой, как и оператор switch
)