如何用字符串将无效操作数固定为二进制表达式?

时间:2019-03-29 15:17:11

标签: c++ string

我正在尝试编写一个二进制搜索功能,该功能将在我的项目中大量使用,运行代码时出现错误消息:

  

在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电脑上,还是在这里不应该做点什么?

我已经在这部分上停留了一段时间了。

1 个答案:

答案 0 :(得分:2)

您需要在两个operator<对象之间定义Land函数。这就是编译器所抱怨的。

错误消息中提供线索的部分是以下表达式

{ return __x < __y; }
         ^^^^^^^^^