std :: find对象指针的向量

时间:2014-02-06 16:52:00

标签: c++ class vector member

我有一个类A,其成员是另一个类B

的对象指针的向量
class A
{
    std::vector<B*> m_member_A

现在我想在std::find上执行m_member_A。 例如。 if(std::find(m_member_A.begin(), m_member_A.end(), B_obj*) != m_member_A.end())

std :: find对这样的向量没有意义。我如何实现这样的功能?

如果它是B(不是指针)的对象向量,它会如何改变?

3 个答案:

答案 0 :(得分:2)

如果要通过指针而不是给定指针找到值指针,可以将std::find_if与合适的仿函数一起使用:

struct Foo
{
  int i;
};

bool operator==(const Foo& lhs, const Foo& rhs) { return lhs.i == rhs.i; }

std::vector<Foo*> v = ....;

Foo f{42};

std::find_if(v.begin(), v.end(), [&f](const Foo* p) { return *p == f; });

答案 1 :(得分:1)

Vector与std::find

完美搭配
auto result = std::find(m_member_A.begin(), m_member_A.end(), itemToFind);
if (result != m_member_A.end()) {
  // found it!
}

或者如果你需要取消引用指针:

auto result = std::find_if(m_member_A.begin(), m_member_A.end(), 
  [] (B* item) { 
    if (item == nullptr) return false; // may want to do something else here
    return *item == someValue;
  });
if (result != m_member_A.end()) {
  // found it!
}

演示:http://ideone.com/jKCrG5

答案 2 :(得分:1)

如果你想比较值而不是比较指针,你可能想要使用std :: find_if代替:

bool IsFoo (B* _item) {
    bool result = false;

    if ( _item != nullptr && _item->value == 1 ) //Whatever is your criteria
        result = true; 

    return result;
}

std::vector<B*> m_member_A;
B* instance = std::find_if (m_member_A.begin(), m_member_A.end(), IsFoo);