我遇到的问题无法解决,就像这样。我有两个班:
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(或任何其他算法)做到这一点,还是应该坚持我之前没有算法的工作实现?
答案 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
中添加了一个示例