Я пытаюсь понять, как работают компараторы в функциях lower_bound, и я наткнулся на этот пример:
#include <vector>
#include <algorithm>
using namespace std;
bool ignore_case(char a, char b) {
return(tolower(a) == tolower(b));
}
int main(void) {
vector<char> v = {'A', 'b', 'C', 'd', 'E'};
auto it = lower_bound(v.begin(), v.end(), 'C');
cout << "First element which is greater than \'C\' is " << *it << endl;
it = lower_bound(v.begin(), v.end(), 'C', ignore_case);
cout << "First element which is greater than \'C\' is " << *it << endl;
it = lower_bound(v.begin(), v.end(), 'z', ignore_case);
cout << "All elements are less than \'z\'." << endl;
return 0;
}
Вывод следующего кода:
First element which is greater than 'C' is b
First element which is greater than 'C' is d
All elements are less than 'z'.
Как пользовательский компаратор проверки на равенство работы? Я думал, что это вернет истину, если а должен быть до б и ложь, если наоборот. Как это работает в функциях lower_bound (), где предполагается получить ПЕРВОЕ значение, которое больше, чем равен нашему заданному ключу.