编程语言
首页 > 编程语言> > c – 有效的编程:如何在不编写实际谓词的情况下使用find_if

c – 有效的编程:如何在不编写实际谓词的情况下使用find_if

作者:互联网

说我有以下定义:

typedef std::vector<std::string> StringVec;
typedef std::set<std::string> StringSet;

和以下对象:

const StringVec& v
const StringSet& s

我想使用find_if来查找s中存在的v中的第一个字符串.

什么是我最好的行动方案?这可以通过绑定一些函数调用来完成,以避免编写新的谓词吗?

编辑:s非常大,所以find_first_of是不可能的.

解决方法:

这是一个基于你的set :: find with boost :: bind的工作示例:

const StringVec& v = {"a", "b", "z"};
const StringSet& s = {"c", "d", "z"};

StringSet::const_iterator (StringSet::*f)(const StringSet::value_type& val) const = &StringSet::find;

StringVec::const_iterator iter = std::find_if(v.begin(), v.end(), boost::bind(f, &s, _1) != s.end());

cout << *iter << endl;

问题是find函数有一个const重载,所以你必须在bind中进行强制转换或使用指向成员的指针来指定你想要的重载.

此外,您必须小心通过引用传递s,否则它将复制该集,并且返回的结束迭代器将与您在比较中使用的结束迭代器不同.

标签:c98,c,boost,stl
来源: https://codeday.me/bug/20190829/1761749.html