在对象向量上使用find_if

时间:2012-06-19 01:55:15

标签: c++ stl

我没有使用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”绑定到isSame的第二个参数。

1 个答案:

答案 0 :(得分:4)

C ++ 11 中简单地说:

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

在旧的 C ++ 03 中,没有mem_fun需要2个参数,所以你必须自己进行绑定:

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