我想在匹配对象的Object指针向量中找到它.这是一个示例代码来说明我的问题:
class A { public: A(string a):_a(a) {} bool operator==(const A& p) { return p._a == _a; } private: string _a; }; vector va; va.push_back(new A("one")); va.push_back(new A("two")); va.push_back(new A("three")); find(va.begin(), va.end(), new A("two"));
我想找到推入向量的第二个项目.但由于vector被定义为指针集合,C++不使用我的重载运算符,而是使用隐式指针比较.什么是首选的C++ - 在这种情况下解决方案的方式?
将find_if与仿函数一起使用:
templatestruct pointer_values_equal { const T* to_find; bool operator()(const T* other) const { return *to_find == *other; } }; // usage: void test(const vector& va) { A* to_find = new A("two"); pointer_values_equal eq = { to_find }; find_if(va.begin(), va.end(), eq); // don't forget to delete A! }
注意:您的运算符==对于A应该是const,或者更好的是,将其写为非成员朋友函数.