std :: upper_bound даст вам итератор для строго большего элемента первого элемента, или "конец" коллекции, если ни один из них не применяется
upper_bound принимает итераторы для начала и конца, конец - один после концаколлекции.Если вы перебираете растущий список значений поиска, вам, конечно, не нужно проходить всю коллекцию, но ваше «начало» может сместиться дальше вправо.
Конечно, с стогом сена всего 5Для элементов не имеет значения, какой алгоритм поиска вы используете, но если он станет очень большим, использование линейного поиска будет потенциально очень медленным, особенно если бы было очень мало игл.
Это ситуация, когда ондействительно имеет значение оба размера.Например, если ваше пространство поиска N велико, но количество искомых элементов (M) мало, тогда O (M log N) действительно намного меньше.(например, M = 20, N = 16K, тогда log N = 15 и M log N равно 300) по сравнению с O (M + N), которое в этом случае составляет 16K.Если размер M приблизительно равен размеру N, тогда O (M log N) намного хуже, чем O (N).
Поэтому в зависимости от размеров ваших коллекций вы можете выбрать, какой алгоритм использовать.