在对象向量上使用find_if
Using find_if on a vector of objects
我没有使用提升库。如何使用 STL 执行此操作?
class Files
{
private:
bool isSame(FileID f1, FileId f2)
{
if(f1.getId()==f2.getId())
return true;
return false;
}
public:
vector<FileId> mod_files;
void update()
{
FildId f = getFileId();
vector<FildId>::const_iterator found = find_if(mod_files.begin(), mod_files.end(), ???);
}
};
我想将isSame作为第三个参数传递给find_if函数,并将"f"绑定到isSame的第二个参数。
在 C++11 中,这很简单:
std::bind(&Files::isSame, this, f);
在旧的 C++03 中,没有需要 2 个参数的mem_fun
,因此您必须自己进行绑定:
class is_same_pred
{
public:
// unary function typedefs
explicit is_same_pred(Files& files, FileId f1) : _files(files), _f1(f1) {}
bool operator()(FileId f2) const { return _files.isSame(_f1, f2); }
private:
Files& _files;
FileId _f1;
};
isSame
可以访问is_same_pred
的地方,然后像这样使用它:
is_same_pred(this, f);
综上所述,您最好将isSame
定义为静态或自由函数:
bool isSame(FileId f1, FileId f2){ ... }
std::bind1st(std::ptr_fun(&isSame), f);
相关文章:
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- 我的简单if-else语句是如何无法访问的代码
- 如何将enable-if与模板参数和参数包一起使用
- 无论条件是否为true,if总是在c++中执行
- Arduino:for/while/if在void setup()或void loop()之前?——错误:之前需要不合格
- OpenMP卸载说'fatal error: could not find accel/nvptx-none/mkoffload'
- Insert函数不适用于2 if语句C++
- If语句未被求值C++
- C++嵌套if语句,基本货币交换
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- 是否可以使用if constexpr删除控制流语句
- 要与"if constexpr"一起使用的编译时消息(在预处理器之后)
- 如何删除peer if else分支中的冗长句子
- 我似乎对if/else的基本语句有问题:/
- 使用.find函数在c++中查找字符和另一个字符之间的大小
- if数组上的随机数
- 将按位if条件转换为普通if条件
- If语句在c++中被忽略
- 比较if语句中的数组值和int值
- 为什么 SearchBack 中的 if (find == A[i]) 除了第一次之外没有给出 true?在调试时,除了第一次之外显然不起作用