天天看點

使用std::find_if提取序列容器的子串

一個需求是這樣的,一個vector容器中,我需要提取滿足一定條件的元素的序列。就比如,一個樹形結構,我把該接口拍扁成vector容器,每個節點都有一個惟一ID。

以下就是根據特定的ID查找節點下的子節點:

1 NodeList OrgTreeParser::findChildsById(const std::string &id)
 2 {
 3     NodeList list;
 4     
 5     auto iter = std::find_if(std::begin(m_list), std::end(m_list),
 6         [&](const OrgTreeNode & item) -> bool {
 7         return item.parent_id.compare(id) == 0;
 8     }
 9     );
10     while (iter != m_list.end())
11     {
12         OrgTreeNode node;
13         node.id = iter->id;
14         node.parent_id = iter->parent_id;
15         node.level_id = iter->level_id;
16         node.name = iter->name;
17         node.addr = iter->addr;
18         node.description = iter->description;
19         list.push_back(node);
20 
21         iter = std::find_if(std::next(iter), std::end(m_list),
22             [&](const OrgTreeNode & item) -> bool {
23             return item.parent_id.compare(id) == 0;
24         }
25         );
26     }
27     
28     return list;
29 }      

references:

https://stackoverflow.com/questions/33226202/what-is-the-best-way-to-convert-a-stdfind-if-on-a-vector-to-a-loop