C ++: Что быстрее - поиск в хэш-карте или оператор switch?

У меня есть шаблон кода, который переводит одно целое число в другое. Примерно так:

int t(int value) {
    switch (value) {
        case 1: return const_1;
        case 3: return const_2;
        case 4: return const_3;
        case 8: return const_4;
        default: return 0;
    }
}

В настоящее время в нем около 50 записей, возможно, позже их будет еще несколько, но, вероятно, не более сотни или двух. Все значения предопределены, и, конечно, я могу упорядочить метки регистра по их значениям. Итак, вопрос в том, что будет быстрее - этот подход или поместить это в хеш-карту (у меня нет доступа к std :: map, поэтому я говорю о настраиваемой хеш-карте, доступной в моем SDK) и выполнять поиск в этой таблице? Хотя, может быть, это немного преждевременная оптимизация ... Но мне просто нужно ваше мнение.

Заранее спасибо.

РЕДАКТИРОВАТЬ : Мои значения case будут в диапазоне от 0 до 0xffff. А по поводу лучшей читаемости хеш-карты. Я не уверен, что он действительно будет лучше читаем, потому что мне все еще нужно заполнить его значениями, так что лист сопоставления констант все еще должен быть где-то в моем коде.

EDIT-2 : Многие полезные ответы уже были даны, большое спасибо. Я хотел бы добавить сюда некоторую информацию. Мой ключ хеширования - целое число, а моя хеш-функция для целого числа - это просто одно умножение с целым переполнением:

EXPORT_C __NAKED__ unsigned int DefaultHash::Integer(const int& /*aInt*/)
{
_asm mov edx, [esp+4]
_asm mov eax, 9E3779B9h
_asm mul dword ptr [edx]
_asm ret
}

Так что это должно быть довольно быстро.

25
задан Haspemulator 28 July 2011 в 17:09
поделиться