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());