У меня есть std :: map для некоторой программы обработки пакетов.
Я не заметил до профилирования, но, к сожалению, только этот поиск карты потребляет около 10% процессорного времени (которое вызывается слишком много времени).
Обычно во входных данных существует не более 10 клавиш.Поэтому я пытаюсь реализовать вид кэша ключей перед картой.
Значение ключа - 13-битное целое число.Я знаю, что есть только 8192 возможных ключа, и массив из 8192 элементов может обеспечить постоянный поиск по времени, но мне уже стыдно, и я не хочу использовать такой наивный подход: (
Теперь, я просто угадываю какой-то методхэширования, которые дают 4-битное кодовое значение для 13-битного целого числа очень быстро.
Любая крутая идея?
Заранее спасибо.
ОБНОВЛЕНИЕ
Помимо позора, я не имею полного контроля над исходным кодом, и почти запрещено создавать новый массив для этой цели.
Менеджер проекта сказал (кто запускал профилировщик), связанный список показывает небольшую производительностьполучить и рекомендовать использовать std :: list вместо std :: map.
UPDATE
Значения ключей являются случайными (без отношения) и не имеют хорошего распределения.
Образец:
1) 0x100, 0x101, 0x10, 0x0, 0xffe
2) 0x400, 0x401, 0x402, 0x403, 0x404, 0x405, 0xff