2011-05-26 62 views
1

我知道如何在矢量中使用
find(vector.begin(), vector.end(), item)!=vector.end()
找到指定值然而,我有一个指向向量类型对象的指针向量,我需要能够搜索此向量为每个元素指向的对象的属性。在指针向量中搜索字符串

我不确定是否可以构建对矢量的.find()方法的调用以解决此问题,或者如果我需要,我需要找到另一种方法来执行此操作。

Vector中打电话找使用类餐厅的名字是 (restaurantPointerVector[i])->getRestaurantName()
但我需要知道如何通过属性搜索返回是否与我寻找已是名餐厅对象存在于矢量中。

回答

4

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中好得多...

+0

你应该使'operator()''const'。 – ildjarn 2011-05-26 22:12:48

+0

啊 - 你已经发布了代码。哦,好吧... – Nim 2011-05-26 22:13:13

+0

@ildjarn:你说得对。编辑。 – 2011-05-26 22:14:07

1

一步一步。

  1. 构造一个functor(函数对象),它在构造过程中获取正在搜索的属性的值。确保operator()正确实现接受的指针向量中的对象。

  2. 在操作

    核对值的属性,以及与此函数对象返回匹配的状态

  3. 呼叫std::find_if

编辑:per @ ildjarn的评论! :)现在我绝对睡觉.. :)

+0

你的意思是'std :: find_if'? ; - ] – ildjarn 2011-05-26 22:13:14

+0

@ildjarn,oops .. – Nim 2011-05-26 22:14:32