предикат, чтобы проверить, находятся ли значения контейнера в диапазоне?

учитывая контейнер как std::vector<T>, где T является универсальным типом для числовых величин (например, int, floatи т. д.), я хотел бы иметь предикат, который принимает в качестве аргументов:

  • сам контейнер
  • диапазон, тип, выражающий числовой набор значений, или просто 2 экстремальных числовых значения, которые должны проверять предикат
  • допуск, тип, выражающий возможное (необязательное) расширение диапазона, в относительном выражении (например, в процентах) или в абсолютном выражении (с числовым значением)

Я хотел бы иметь в качестве вывода:

  • результат предиката
  • если диапазон не достаточен для некоторых величин, поэтому допуск «используется» для некоторых значений или нет (но предикат все еще true )

В стандартной библиотеке C ++, похоже, нет даже понятия range и это странно для меня просто потому, что есть много интересных алгоритмов и типов, но ничего, что могло бы служить моим целям в этом случае.

Прежде чем продолжить свой собственный путь, я спрашиваю, есть ли что-то подобное с точки зрения типов и алгоритмов в библиотеке C ++?

0

Решение

Вместо того, чтобы оценивать состояние каждого элемента в коллекции, я думаю, что я бы начал с использования std::minmax_element найти самые маленькие и самые большие элементы в коллекции.

Оттуда просто проверить result.first < minimum и / или result.second > maximum,

Работа с допуском — это в основном вопрос повторения теста с расширенным диапазоном.

Что касается того, может ли это быть лучше, чем std::find_if или же std::all_of, это будет зависеть как от количества предметов, которые вы ожидаете в коллекции, так и от вероятности нахождения значения вне диапазона, которое позволило бы досрочно выйти. Я думаю, что вам понадобятся некоторые знания о данных, чтобы дать осмысленный прогноз об этом.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]