Я понимаю, что я не должен оптимизировать каждое отдельное место моей программы, поэтому, пожалуйста, рассмотрите этот вопрос как "академический"
У меня есть максимум 100 строк и целое число для каждого из них, что-то вроде этого:
MSFT 1
DELL 2
HP 4
....
ABC 58
Этот набор является preinitialized, что означает, что после его создания он никогда не изменяется. После инициализации набора я использую его довольно интенсивно, поэтому приятно иметь быстрый поиск. Строки довольно короткие, максимум 30 символов. Mapped int
также ограничен и от 1 до 100.
По крайней мере, зная, что строки предициализированы и никогда не меняются, должно быть возможно "найти" хеш-функцию, которая приводит к отображению "одна корзина-один элемент", но, вероятно, есть и другие хаки.
Одна оптимизация, которую я могу себе представить - я могу читать только первый символ. Например, если "DELL" - единственная строка, начинающаяся с "D", и я получил что-то вроде "D ***", чем мне не нужно даже читать строку! это obviosly "DELL". Такой поиск должен быть значительно быстрее, чем "поиск хэшмапа". (здесь я предположил, что мы получаем только символы, которые находятся в хеше, но это не всегда так)
Есть ли какие-либо готовые к использованию или простые в реализации решения для моей проблемы? Я использую С++ и boost.
upd. Я проверил и обнаружил, что для моего лимита обмена для тикера 12 символов, а не 30, как указано выше. Однако другие обмены могут допускать незначительные более длинные символы, поэтому интересно иметь алгоритм, который будет продолжать работать с длинными тикерами длиной до 20 ч.