我试图了解比较器如何在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'.
自定义的相等性比较器如何工作?我认为如果a应该在b之前,则返回true;反之亦然,否则返回false。它如何在Lower_bound()函数中工作,该函数应该检索大于等于给定键的FIRST值。
此示例未正确使用std::lower_bound
。如果comp
是使用的比较器,并且value
是要搜索的值,则comp(element, value) == true
的所有元素必须在范围内comp(element, value) == false
的所有元素之前。在显示的任何调用中均不是这种情况。
此外,如果第一个参数小于第二个参数,则比较器应返回true,而如果第一个元素等于第二个参数,则所示函数将返回true。严格禁止这样做,但是可能不会产生预期的结果。