Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ stl二进制搜索导致编译器错误_C++_Visual Studio 2010_Stl_Vector_Binary Search - Fatal编程技术网

C++ stl二进制搜索导致编译器错误

C++ stl二进制搜索导致编译器错误,c++,visual-studio-2010,stl,vector,binary-search,C++,Visual Studio 2010,Stl,Vector,Binary Search,全部,, 我有这样一个代码: bool ISearchable::PerformSearch(const vector<Passenger *> &passList, const string &lname, const string &fname) { stable_sort( passList.begin(), passList.end(), ISortable( 7 ) ); string stringToSearch = lname;

全部,, 我有这样一个代码:

bool ISearchable::PerformSearch(const vector<Passenger *> &passList, const string &lname, const string &fname)
{
    stable_sort( passList.begin(), passList.end(), ISortable( 7 ) );
    string stringToSearch = lname;
    stringToSearch += " ";
    stringToSearch += fname;
    binary_search( passList.begin(), passList.end(), stringToSearch );
}
bool-ISearchable::PerformSearch(const-vector和passList、const-string和lname、const-string和fname)
{
稳定排序(passList.begin()、passList.end()、ISortable(7));
字符串stringToSearch=lname;
stringToSearch+=“”;
stringToSearch+=fname;
二进制搜索(passList.begin()、passList.end()、stringToSearch);
}
“乘客”向量按相同的标准排序,即姓氏+“”+名

但是,当我试图编译它时,它会给出一个错误:

1>c:\program files (x86)\microsoft visual studio
10.0\vc\include\algorithm(2978): error C2678: binary '<' : no operator
found which takes a left-hand operand of type 'const std::string' (or
there is no acceptable conversion)
1>          could be 'built-in C++ operator<(Passenger *, Passenger *)'
1>          while trying to match the argument list '(const
std::string, Passenger *const )'
1>          c:\users\igor\documents\visual studio
2010\projects\project.cpp(598) : see reference to function
template instantiation 'bool
std::binary_search<std::_Vector_const_iterator<_Myvec>,std::string>(_FwdIt,_FwdIt,const
_Ty &)' being compiled
1>          with
1>          [
1>              _Myvec=std::_Vector_val<Passenger
*,std::allocator<Passenger *>>,
1>
_FwdIt=std::_Vector_const_iterator<std::_Vector_val<Passenger
*,std::allocator<Passenger *>>>,
1>              _Ty=std::string
1>          ]
1>
1>c:\ProgramFiles(x86)\microsoft visual studio

10.0\vc\include\algorithm(2978):错误C2678:binary'您需要一个自定义比较器来将乘客指针与字符串进行比较,例如:

binary_search( passList.begin(), passList.end(), stringToSearch,
    [](Passenger * p, string const & name) {return p->name() < name;} );

您正试图在
Passenger*
的向量中搜索
std::string
-编译器不知道如何执行此操作。如果您能提供一个,以及您想要完成的任务的描述,这将对我们有所帮助。是否有从
std::string
Passenger
的转换?如果是这样,在将其传递给二进制搜索之前,将此转换应用于
stringToSearch
。编译器告诉我们,它不知道如何将
Passenger*
std::string
进行比较。这几乎是正确的,除了这里的Passenger类只有姓和名字段,而不是名(),所以他们必须这样做:
returnp->last_name+“”+p->first_name
@DerrickCoetzee:事实上,我的示例假设类提供了一种获取全名的特殊方法。它需要修改以匹配实际接口。
// In C++03, this must be at namespace scope for some reason.
struct ComparePassengerName {
    bool operator()(Passenger * p, string const & name) {
        return p->name() < name;
    }
};

binary_search( passList.begin(), passList.end(), stringToSearch,
               ComparePassengerName());