我有一个Models
如下的向量:
struct Model
{
std::string mName;
// .......
};
给定一个代表模型名称的字符串,我想看看是否可以在向量中找到其中一个模型。
现在我有这个:
std::string assetName = "monkey";
std::vector<Model>::iterator iter = std::find_if(mModels.begin(), mModels.end(), boost::bind(&Model::mName, _1) == assetName);
但这不会进行不区分大小写的字符串比较。所以我读到了boost/algorithm/string.hpp
, with boost::iequals
, 正确地做到了这一点。
这是我使用它的尝试:
std::vector<Model>::iterator iter = std::find_if(mModels.begin(), mModels.end(), boost::iequals(boost::bind(&Model::mName, _1), assetName));
然而这并没有编译并报告数百行编译错误。我相信 std::find_if 期望只有一个参数的第三个参数函数。
有一个简单的解决方法吗?
编辑:我忘了提到我不能使用 C++11,但我可以使用 boost!
EDIT2:下面的答案似乎给了我这个编译错误,使用这个:
std::vector<Model>::iterator iter = std::find_if(mModels.begin(), mModels.end(), boost::bind(&boost::iequals<std::string, std::string>, boost::bind(&Model::mName, _1), assetName));
bind.hpp(69): error C2825: 'F': must be a class or namespace when followed by '::'
2> bind\bind_template.hpp(15) : see reference to class template instantiation 'boost::_bi::result_traits<R,F>' being compiled
2> with
2> [
2> R=boost::_bi::unspecified,
2> F=bool (__cdecl *)(const std::string &,const std::string &,const std::locale &)
2> ]
2> resourcemanifest.cpp(24) : see reference to class template instantiation 'boost::_bi::bind_t<R,F,L>' being compiled
2> with
2> [
2> R=boost::_bi::unspecified,
2> F=bool (__cdecl *)(const std::string &,const std::string &,const std::locale &),
2> L=boost::_bi::list2<boost::_bi::bind_t<const std::basic_string<char,std::char_traits<char>,std::allocator<char>> &,boost::_mfi::dm<std::string,Model>,boost::_bi::list1<boost::arg<1>>>,boost::_bi::value<std::string>>
2> ]