Поиск строки в векторе указателей - PullRequest
1 голос
/ 27 мая 2011

Я понимаю, как найти определенное значение в векторе, используя
find(vector.begin(), vector.end(), item)!=vector.end()
, однако, у меня есть вектор указателей, который указывает на объекты типа Restaurant, и мне нужно иметь возможность искать этот вектор для атрибута объектов, на который указывает каждый элемент.

Я не уверен, смогу ли я создать вызов метода вектора .find (), чтобы это исправить, или, если мне нужно, мне нужно найти другой способ сделать это.

Звонок из вектора, чтобы найти название ресторана, используя класс (restaurantPointerVector[i])->getRestaurantName()
но мне нужно знать, как искать по этому атрибуту, чтобы узнать, существует ли уже существующий в векторе объект Restaurant с именем, которое я ищу.

Ответы [ 2 ]

4 голосов
/ 27 мая 2011

find_if твой друг.Вот пример:

struct Comparator {
   const char* expected_name;

   Comparator(const char* _expected_name) 
     : expected_name(_expected_name)
   {}

   bool operator()(const Restaurant* r1) const
   { return !strcmp(r1->getRestaurantName(), expected_name); } // Just an example using strcmp
};

затем:

find_if(vector.begin(), vector.end(), Comparator("Searched Restaurant Name"));

Конечно, это намного лучше с C ++ 0x ...

1 голос
/ 27 мая 2011

Шаг за шагом.

  1. Создайте функтор (функциональный объект), который принимает во время построения значение атрибута, по которому вы ищете.Убедитесь, что operator() реализован правильно для принятия указателя на объект в векторе.

  2. в операторе проверьте атрибут по значению и верните состояние соответствия

  3. вызов std::find_if с этим функциональным объектом.

РЕДАКТИРОВАНИЕ: за комментарий @ ildjarn!:) теперь я определенно ложусь спать ..:)

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