C++使用自定义比较器调用upper_bound时出现类型绑定错误如何解决
错误原因
std::upper_bound 对自定义比较器的调用逻辑为:针对传入的查找值val和区间内的元素elem,会执行comp(val, elem)判断查找位置。
你定义的compareInterval比较器要求两个入参均为const vector<int>&类型,但调用upper_bound时传入的查找值是int类型的i,int类型无法绑定到const vector<int>&类型的形参,直接触发类型不匹配的编译报错。
而前面调用sort时没有报错,是因为sort比较的是区间内的两个vector<int>元素,两个参数都和比较器的形参类型匹配。
修复方案
最简单的修复方式是将查找值包装为符合比较器要求的vector类型,将upper_bound调用行修改为:
auto low = upper_bound(bookings.begin(), bookings.end(), vector<int>{i}, compareInterval);
也可以额外重载支持int和vector对比的比较器,不过对于当前场景上述修改已经能满足需求。
内容的提问来源于stack exchange,提问作者user6549804
相关产品推荐
相关产品推荐

