在C ++中,如果对象成员与特定值匹配,我想在列表中找到一个对象。
class gate{
public:
std::string type;
}
class netlist {
std::list<gate *> gates_;
void identify_out_gate();
}
现在我想根据其类型从列表中找到特定的门。我使用以下内容:
netlist::identify_out_gate()
{
for (std::list<gate *>::const_iterator out_gate = gates_.begin(); out_gate != gates_.end(); ++out_gate)
{
if((*out_gate)->type == "output")
{
//do something......
}
}
}
但我想知道我是否可以使用find或find_if以及如何使用?
答案 0 :(得分:3)
不确定。例如:
auto iter = std::find_if(gates_.begin(),
gates_.end (),
[](gate const *g) { return g->type == "output"); });
iter
将具有std::list<gate*>::iterator
类型。
请注意,这只能找到一个元素。要查找下一个,请使用find_if(iter + 1, gates_.end(), ...)
。此外,请务必检查iter != gates_.end()
,因为如果iter == gates_.end()
,则找不到任何内容。