Прежде всего, измерьте перед выполнением оптимизации.
Вам действительно нужно оптимизировать этот поиск?
Если это так, то, во-вторых, сначала подумайте об алгоритмической сложности,Например, вы можете использовать дерево (например, std::map
) вместо массива?Если это так, то это зависит от относительной частоты вставок / удалений по сравнению с поиском, но предпосылка наличия отсортированного массива указывает на то, что поиски являются частыми по сравнению с изменениями в наборе данных, так что имеет смысл выполнить небольшую дополнительную работу длявставки / удаления, что делает каждый поиск намного быстрее, а именно - логарифмическое время.
Если вы обнаружите, что действительно время поиска является узким местом, которое требует адресации, и нет, никакое изменение представления данных невозможно, и списоккороче, тогда линейный поиск, как правило, будет быстрее, потому что он выполняет меньше работы за сравнение.
В противном случае, если список длиннее, а конкретное распределение значений не известно или не предполагается, а значения не могутследует рассматривать как числовое, а потребление памяти должно быть постоянным (скажем, исключая создание хеш-таблицы), тогда двоичный поиск производит 1 бит информации на сравнение и, вероятно, является лучшим, что вы можете сделать для первого поиска.
Ура & hth.