[英]How to find a specific object in a STL container
我想在std :: list中找到一个特定的对象,其中该对象的属性遇到一个输入参数。
我找到了使用带有find(。)或find_if(。)的一元谓词的解决方案,但是我需要一个二进制函数。
为什么不能只让迭代器作为对象的引用(如java),然后通过引用检查字段? 有没有一种方法可以不使用find / find_if ...
我找到了使用带有find(。)或find_if(。)的一元谓词的解决方案,但是我需要一个二进制函数。
不,您确实需要一元谓词–毕竟, find_if
函数仅与一个对象(列表中的当前对象)进行比较。 您的谓词需要知道要与哪个属性值进行比较:
struct compare_with {
int attr_value;
compare_with(int attr_value) : attr_value(attr_value) { }
bool operator ()(your_object const& obj) const { return obj.attr == attr_value; }
};
现在您可以调用find_if
:
result = find_if(your_list.begin(), your_list.end(), compare_with(some_value));
为什么不能只让迭代器作为对象的引用(如java),然后通过引用检查字段?
您可以。 但这还不清楚你是什么意思。 只是遍历列表。
是的,你可以这么做:
list<myclass>::iterator i;
for(i = mylist.begin(); i != mylist.end(); ++i)
{
if(i->field == value_to_check_for)
break;
}
// now i is an iterator pointing to the object if it was found
// or mylist.end() if it wasn't
但是,当然,如果您一次只检查一个对象,我看不到为什么需要一个二进制谓词。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.