我正在尝试从另一个列表中删除与元素不匹配的元素。
例如,我有std::list<MyClass> mainList
这样的东西:
ID Number
-------------
1 100
2 200
3 200
4 100
5 300
我还有一个std::list<long> itemsForFiltering
包含的内容:100, 300
。
在这里,我试图删除所有mainList
不在其中的元素itemsForFiltering
。
int filterList(std::list<MyClass> &mainList, std::list<long> &itemsForFiltering)
{
mainList.remove_if([](MyClass &val)
{
return val.Number != itemsForFiltering;
});
return 0;
}
这部分可能还需要一个lambda函数,return val.Number != itemsForFiltering;
但我不确定如何实现。因此,任何帮助表示赞赏。
调用此函数后,我应该在mainList
:
ID Number
-------------
1 100
4 100
5 300
为了提高效率,您可以先创建一组无序的项目进行过滤:
#include <unordered_set>
using namespace std;
...
auto itemsForFilteringSet = unordered_set<long>{itemsForFiltering};
现在您可以使用
mainList.remove_if([&](MyClass &val)
{
return itemsForFilteringSet.find(val) == itemsForFilteringSet.end();
});
这将使复杂度线性变化,而不是列表长度的乘积。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句