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

Posted foo__hack

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用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

以上是关于使用std::find_if提取序列容器的子串的主要内容,如果未能解决你的问题,请参考以下文章

C++ CppCheck算法建议(std::find_if代替原始循环)相关性

为啥在 std::istream_iterator 上使用的 std::find_if 似乎返回最后一个元素?

为啥 std::find_if(first, last, p) 不采用引用谓词?

6.14 提取第n个分割的子串

6.14 提取第n个分割的子串

BZOJ4032: [HEOI2015]最短不公共子串(LibreOJ #2123)