Представьте, что у меня есть контейнер C
, содержащий элементы некоторого типа T
и предикат, с помощью которого можно определить, являются ли какие-либо две переменные типа T
«эквивалентными». Например, если T
равно int
, у меня может быть предикат eqv = [](int a, int b){ return a % 5 == b % 5; }
такой, что два целых числа эквивалентны под eqv
, если они имеют одинаковый остаток при делении на пять.
Учитывая такой контейнер и предикат, есть ли какая-то функция STL (например, из algorithm
), которую я могу элегантно (т.е. без написания большого количества кода) определить количество разделов C
под eqv
?
Для Например, если eqv
соответствует указанному выше, а C
равно std::vector<int>{1,2,3,6,7,8}
, я хотел бы получить результат 3
(потому что классы эквивалентности: {1,6}
, {2,7}
и {3,8}
).