如何根据对象成员值从列表中查找对象

时间:2014-11-30 15:17:34

标签: c++ c++11

在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以及如何使用?

1 个答案:

答案 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(),则找不到任何内容。