当前位置:  开发笔记 > 编程语言 > 正文

如何在c ++中使用带有指针对象向量的find算法?

如何解决《如何在c++中使用带有指针对象向量的find算法?》经验,为你挑选了1个好方法。

我想在匹配对象的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++ - 在这种情况下解决方案的方式?



1> James Hopkin..:

将find_if与仿函数一起使用:

template 
struct 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,或者更好的是,将其写为非成员朋友函数.

推荐阅读
和谐啄木鸟
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有