我理解如何使用左find(vector.begin(), vector.end(), item)!=vector.end()
来找到矢量中的特定值。但是,我有一个指针向量,指向餐厅类型的对象,我需要能够在此向量中搜索每个元素指向的对象的属性。
我不确定我是否可以构造对vector的.find()方法的调用来解决这个问题,或者如果我需要,我需要找到另一种方法来执行此操作。
来自向量的调用以查找使用该类的餐馆名称
(restaurantPointerVector[i])->getRestaurantName()
但我需要知道如何搜索此属性以返回向量中是否存在具有我正在搜索的名称的Restaurant对象。
答案 0 :(得分: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来说更好......
答案 1 :(得分:1)
一步一步。
构造一个仿函数(函数对象),它在构造期间获取您要搜索的属性的值。确保正确实现operator()
以接受指向向量中对象的指针。
根据值检查属性,并返回匹配状态
使用此函数对象调用std::find_if
。
编辑:按@ ildjarn的评论! :)现在我绝对要睡觉了.. :)