Вы выполняете линейный поиск, который определенно равен O(n)
.Однако это, к сожалению, самый быстрый алгоритм поиска для несортированного массива / вектора.
Поэтому, чтобы получить что-то быстрее, вам нужно сначала отсортировать вектор. Сделайте это заранее, один раз, или ваш результирующий код будет на самом деле медленнее, чем линейный поиск. std::sort()
достаточно эффективен - хотя есть несколько более быстрых алгоритмов сортировки, если вы захотите найти один.Убедитесь, что вы сохраняете отсортированный вектор, либо на месте, либо в новой переменной, в зависимости от ваших потребностей. Вы не хотите сортировать данные более одного раза.
Затем вы можете использовать алгоритм двоичного поиска, чтобы найти значение.std::lower_bound
или std::upper_bound
, вероятно, подойдет вашим потребностям (спасибо Эрику за эту заметку).В противном случае, если вы используете стандартный бинарный поиск, даже если точное совпадение не найдено, это приведет вас к тому, что вы смотрите на два или три значения, одно из которых определенно соответствует вашему.
Теперь, как указал Эрик в комментариях, сортировка обходится дороже, чем линейный поиск, поэтому, если вы ищете только этот набор данных один раз , у вас уже есть наиболее эффективный подход.
РЕДАКТИРОВАТЬ: В комментариях ОП описал необходимость иногда добавлять новые данные в вектор.Это довольно простая проблема, которую нужно решить: просто используйте двоичный поиск, чтобы найти, где новое значение принадлежит в векторе sorted , и вставьте его туда.