std :: find函数可以用于我们自己的类吗?

时间:2011-08-04 22:20:54

标签: c++

我有一组课程。每个类都继承自另一个类。关系如下。 (我只是发布了一个类继承自另一个类的方式,只是为了让所有人都知道)

class LineNumberList : public MyVector <LineNumber > //top class
class MyVector : public std::vector <Type>
class LineNumber : public ElementNumber 

class ElementNumber {                 //this is the base class
        protected:
    int number;
        public:
    ElementNumber(int p){number=p;}
         // some more codes // 
}

现在,我想实现一个可用于我的顶级类find元素的函数,即LineNumberList。我尝试使用标准find函数,但它不起作用。任何人都可以帮我实现类似的查找功能,非常感谢。

1 个答案:

答案 0 :(得分:3)

“我尝试使用标准查找功能,但它不起作用。”适合我:

#include <vector>
#include <iostream>
#include <algorithm>

class ElementNumber {
  protected:
    int number;
  public:
    ElementNumber(int p) :number(p) {}
    bool operator==(const ElementNumber&e) { return number == e.number; }
};
class LineNumber : public ElementNumber {
  public:
    LineNumber(int p) : ElementNumber(p) {}
};
template <class Type>
class MyVector : public std::vector<Type> {
};
class LineNumberList : public MyVector<LineNumber> {
};

// EDIT: add local implementation of std::find
template<class InputIterator, class T>
InputIterator myfind ( InputIterator first, InputIterator last, const T& value )
{
  http://www.cplusplus.com/reference/algorithm/find/
  for ( ;first!=last; first++) if ( *first==value ) break;
  return first;
}

int main() {
  LineNumberList ll;
  LineNumber l(7);
  ll.push_back(l);
  std::cout << std::boolalpha << !(std::find(ll.begin(), ll.end(), l) == ll.end()) << "\n";
  std::cout << std::boolalpha << !(::myfind(ll.begin(), ll.end(), l) == ll.end()) << "\n";
}