Алгоритм STL в классе - PullRequest
       11

Алгоритм STL в классе

2 голосов
/ 20 апреля 2009

Есть ли способ использовать алгоритмы stl, такие как find () и find_if () в контейнере объектов? Пример: с помощью find () найти элемент с именем «abc» в векторе класса Alfhabetic.

Ответы [ 2 ]

7 голосов
/ 20 апреля 2009

Вы можете определить предикат сравнения (функтор). Вот общая реализация:

struct AlphabeticNameComp
{
   AlphabeticNameComp( const std::string& toCompare)
      : toCompare_( toCompare) { }

   bool operator()( const Alphabetic& obj) const
   {
       return toCompare_ == obj.name();
   }

private:
   const std::string toCompare_;
};

В векторе буквенных элементов

std::vector< Alphabetic> vect;

Вы можете запустить поиск как:

std::find_if( vect.begin(), vect.end(), AlphabeticNameComp( "abc"));
1 голос
/ 20 апреля 2009

Вы можете определить operator==() для класса Alfhabetic, который соответствует только элементу данных abc

что-то вроде этого:

bool operator==(const Alfhabetic& a, const Alfhabetic& b)
{
    return (a.abc == b.abc);
}

и затем поиск экземпляра Alfhabetic, инициализированного abc в качестве требуемого значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...