c++ - STL 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;
    stringToSearch += " ";
    stringToSearch += fname;
    binary_search( passList.begin(), passList.end(), stringToSearch );
}

“Passenger” vector 按相同的标准排序,即 last_name + ""+ first_name。

然而,当我尝试编译它时,它给出了一个错误:

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>

错误是什么以及如何解决? 我在这里看到了相同的代码,但没有任何问题。

Passenger 类不会重载运算符<,因为它没有多大意义。但是,它确实包含 last_name 和 first_name 之外的一些字段。

感谢您的帮助。

最佳答案

您需要一个自定义比较器来比较乘客指针和字符串,例如:

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

您可能需要将 p->name() 更改为 Passenger 提供的任何方法来提取全名。

如果您的编译器不支持 lambda,那么您需要单独定义它:

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

关于c++ - STL binary_search 给出编译器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9409422/

相关文章:

c++ - 适用于 Windows CE 的任何 OSTN02 库

c++ - 带有 C++ 的 OpenCV 无法编译

c# - 如何显示在 Visual Studio 中打开的文本文件的行号?

c++ - 为什么在模板函数中使用 iterator_traits 而不是仅仅使用另一个模板类型参数?

c++ - 在 Release 模式下访问时 vector 大小为 0

c++ - 你怎么知道 QMutex 是否被锁定?

c++ - 不允许不完整的类型 : stringstream

c++ - VS 从 2005 年迁移到 2010 年,LNK1316 : duplicate managed resource name

来自 XML 的 C# 类定义

c++ - STL TR1 为 gcc 提供文档