在对象向量上使用find_if

Using find_if on a vector of objects

本文关键字:find if 对象 向量      更新时间:2023-10-16

我没有使用提升库。如何使用 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);