通过其中一个值在向量中查找对象

时间:2012-03-07 09:42:13

标签: class stl vector find member

我遇到的问题无法解决,就像这样。我有两个班:

class1
{
private:
  int identifier;
  double value;
public:
  setters,getters,etc...
}
class2
{
private:
  vector<class1> objects;
  vector<int> some_value;
  vector<double> other_value;
...
}

问题是我需要通过class1对象中的标识符(来自class2的成员函数)搜索第二类对象中的对象向量。我试过像:

int getObj(const int &ident, double &returnedValue, double &returnedOther_value)
{
  int p;
  p = find(objects.begin()->getIdentifier(),objects.end()->getIdentifier(),ident);
  ..

..然后我希望找到一种方法从两个类中找到相应的(非常量)成员变量值和other_value的迭代器值,但到目前为止代码都没有编译,因为我是可能做的搜索都错了。有没有办法用find(或任何其他算法)做到这一点,还是应该坚持我之前没有算法的工作实现?

1 个答案:

答案 0 :(得分:1)

您需要将find_if与自定义谓词一起使用。类似的东西:

class HasIdentifier:public unary_function<class1, bool>  
{  
public:
    HasIdentifier(int id) : m_id(id) { }  
    bool operator()(const class1& c)const  
    {  
        return (c.getIdentifier() == m_id);  
    }  
private:
    int m_id;  
};  


// Then, to find it:
vector<class1>::iterator itElem = find_if(objects.begin(), objects.end(), HasIdentifier(ident));  

我还没有测试过,所以也许需要一些调整。

如果你有C11,我想你可以使用lambdas,但我没有它,所以我没有机会学习它们。

更新: 我在http://ideone.com/D1DWU

中添加了一个示例