C++ 下限()STL中的自定义比较器

C++ 下限()STL中的自定义比较器,c++,stl,C++,Stl,我试图了解比较器如何在下限函数中工作,我遇到了以下示例: #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',

我试图了解比较器如何在下限函数中工作,我遇到了以下示例:

#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;  
}  

等式检查的自定义比较器是如何工作的?。我认为如果a在b之前,则返回true,反之亦然,则返回false。它在lower_bound()函数中是如何工作的,该函数应该检索大于等于给定键的第一个值。

此示例没有正确使用
std::lower_bound
。如果使用的比较器是
comp
,搜索的值是
value
,则
comp(element,value)==true的所有元素必须位于范围内
comp(element,value)==false的所有元素之前。显示的任何调用都不是这种情况


此外,如果第一个参数小于第二个参数,则比较器应该返回true,而如果第一个元素等于第二个参数,则显示的函数将返回true。这本身并不是严格禁止的,但可能不会产生预期的结果。

此示例未正确使用
std::lower\u bound
。如果使用的比较器是
comp
,搜索的值是
value
,则
comp(element,value)==true的所有元素必须位于范围内
comp(element,value)==false的所有元素之前。显示的任何调用都不是这种情况


此外,如果第一个参数小于第二个参数,则比较器应该返回true,而如果第一个元素等于第二个参数,则显示的函数将返回true。这本身并不是严格禁止的,但它可能不会产生预期的结果。

请再次阅读,并使用两个(!)顺序的一些值对进行测试。我正在尝试计算比较器如何适应下限(),检查了大量资源,如果下限()返回第一个值,它不应该按原样返回a吗!=我们的钥匙请阅读并将其与您的函数进行比较。再次阅读并使用两个(!)顺序中的一些值对进行测试。我正在尝试计算比较器如何适应下限(),检查了大量资源,如果下限()返回第一个值,它不应该按原样返回a吗!=我们的钥匙只要读一下并将其与你的函数进行比较。如果我使用一个比较器函数,比如
boolcompare(inta,intb){返回一个@shawnindamnen,使用这个比较器,
std::lower_bound
变成
std::upper_bound
。它不返回最后一个值,即
。有没有办法直观地理解比较器是如何从给定数组中找出值的?@shawnindamnen,比较器对范围进行分区,并ode>lower_bound
查找比较器返回的第一个元素
false
lower_bound
使用二进制搜索,因此分区要求很重要。@shawnindamnen范围未按比较器排序,因此您的调用不正确。
std::lower_bound
返回与false比较的第一个值给定值,假设所有比较为真的值都在所有比较为假的值之前。如果我使用比较器函数,如
bool compare(int a,int b){返回一个@shawnindamnen,使用这个比较器,
std::lower_bound
变成
std::upper_bound
。它不返回最后一个值,即
。有没有办法直观地理解比较器是如何从给定数组中找出值的?@shawnindamnen,比较器对范围进行分区,并ode>lower_bound
查找比较器返回的第一个元素
false
lower_bound
使用二进制搜索,因此分区要求很重要。@shawnindamnen范围未按比较器排序,因此您的调用不正确。
std::lower_bound
返回与false比较的第一个值给定值,假设所有比较为真的值在所有比较为假的值之前。
First element which is greater than 'C' is b
First element which is greater than 'C' is d
All elements are less than 'z'.