我正在尝试编写一个二进制搜索功能,该功能将在我的项目中大量使用,运行代码时出现错误消息:
在main.cpp包含的文件中:8: 在/ Library / Developer / CommandLineTools / usr / include / c ++ / v1 / iostream包含的文件中:38: 在/ Library / Developer / CommandLineTools / usr / include / c ++ / v1 / ios:216中包含的文件中: 在/ Library / Developer / CommandLineTools / usr / include / c ++ / v1 / __ locale:15中包含的文件中: 在/ Library / Developer / CommandLineTools / usr / include / c ++ / v1 / string:477包含的文件中: 在/ Library / Developer / CommandLineTools / usr / include / c ++ / v1 / string_view:176中包含的文件中: 在/ Library / Developer / CommandLineTools / usr / include / c ++ / v1 / __ string:56中包含的文件中: / Library / Developer / CommandLineTools / usr / include / c ++ / v1 / algorithm:719:71:
错误:二进制表达式无效的操作数(“ const Land”和“ const Land”) bool operator()(const _T1&__x,const _T1&__y)const {return __x <__y;}
这是我的职责:
long int CLandRegister::binarySearch(vector<Land> lands, Land l, size_t unsortedStart){
long int val = lower_bound(lands.begin(), lands.begin()+unsortedStart-1, l)-lands.begin();
if(lands[val].city == l.city && lands[val].addr == l.addr &&
lands[val].region == l.region && lands[val].id == l.id){
return val;
}
for(size_t i = unsortedStart-1; i < lands.size(); i++){
if(lands[i].city == l.city && lands[i].addr == l.addr &&
lands[i].region == l.region && lands[i].id == l.id){
return i;
}
}
return -1;
}
城市,地址和地区是字符串,id是整数。
起初,我认为问题在于字符串之间用==符号进行比较,因为我是c ++的新手,并且已经使用c一段时间了。因此,我用std :: compare代替了==符号,我认为这可以解决问题。但是它仍然失败。
我的系统有问题吗?我在Mac电脑上,还是在这里不应该做点什么?
我已经在这部分上停留了一段时间了。
答案 0 :(得分:2)
您需要在两个operator<
对象之间定义Land
函数。这就是编译器所抱怨的。
错误消息中提供线索的部分是以下表达式
{ return __x < __y; }
^^^^^^^^^