У меня есть шаблон кода, который переводит одно целое число в другое. Примерно так:
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
}
Так что это должно быть довольно быстро.