#include <numeric>
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
vector<int> v1{1,2,3};
vector<int> v2{3,2,1};
vector<int> v3{3,2,1,2};
int increasing = reduce(v1.begin(), v1.end(), 1, less<int>());
for_each(v1.begin(), v1.end(),[](int &k){cout<< k <<",";});
cout << " Increasing? " << increasing << endl;
increasing = reduce(v2.begin(), v2.end(), 1, less<int>());
for_each(v2.begin(), v2.end(),[](int &k){cout<< k <<",";});
cout << " Increasing? " << increasing << endl;
increasing = reduce(v3.begin(), v3.end(), 1, less<int>());
for_each(v3.begin(), v3.end(),[](int &k){cout<< k <<",";});
cout << " Increasing? " << increasing << endl;
}
В этом примере я проверяю векторы, если все их элементы увеличиваются или нет, и вот результаты:
1,2,3, Increasing? 1
3,2,1, Increasing? 0
3,2,1,2, Increasing? 0
Векторы v1
и v2
проходят тесты правильноно v3
нет, потому что функция less<int>
по умолчанию применяется как ассоциативно слева , т. е. применяется только к элементу слева.
Для проверки v3
правильно, функция less<int>
должна применяться к вектору в целом и AFAIK, что достигается с помощью так называемой цепочечной ассоциативности .
Обратите внимание, что я непросто пытаюсь проверить отсортированную последовательность. Я ищу способ реализовать так называемую ассоциативность цепочек для любой функции, и здесь для примера это less<int>
.
Так что я хотел быприменять less<int>
как цепочечно-ассоциативный в сжатой форме, т.е. без путаницы в коде. Как я могу это сделать?
Спасибо.