2016-11-12 5 views
0

У меня есть вектор объектов, которые реализуют operator< и operator==. C++ предлагает std :: sort для эффективного сортировки этого вектора.C++ предлагает std :: sort, но также предлагает что-то для эффективного поиска?

Есть ли функция в std для эффективного поиска вектора повторно?

У меня будет много поисков по этому отсортированному вектору, поэтому std :: find не кажется хорошим вариантом, так как он просто просматривает итератор, пока не найдет совпадение.

+1

Есть ли причина, по которой вы храните его в векторе, а не в наборе/мультимножестве? – lorro

+2

'std :: lower_bound' или' std :: binary_search' может помочь. – Jarod42

+0

@lorro: ... или их неупорядоченные _... аналоги. – DevSolar

ответ

4

Конечно, есть.

Например, обратите внимание на функции lower_bound и upper_bound.

Также может быть полезным binary_search.

Все эти функции работают на отсортированном входе и имеют логарифмическую сложность.

2

Попробуйте std::binary_search от #include <algorithm>

+4

Полезно только, если вам нужно только «да»/«нет». – Yakk