gpt4 book ai didi

c++ - 在对象 vector 上使用 find_if

转载 作者:行者123 更新时间:2023-11-27 23:23:35 30 4
gpt4 key购买 nike

我没有使用 boost 库。我如何使用 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”绑定(bind)到 isSame 的第二个参数。

最佳答案

C++11 中,这很简单:

std::bind(&Files::isSame, this, f);

在旧的 C++03 中,没有接受 2 个参数的 mem_fun,因此您必须自己进行绑定(bind):

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;
};

is_same_pred 可以访问 isSame,然后像这样使用它:

is_same_pred(this, f);

综上所述,您最好将 isSame 定义为 staticfree-function:

bool isSame(FileId f1, FileId f2){ ... }

std::bind1st(std::ptr_fun(&isSame), f);

关于c++ - 在对象 vector 上使用 find_if,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11093416/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com