我正在尝试删除与另一个列表中的元素不匹配的元素。
例如我有 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();
});
这将使复杂性与列表长度之和成线性关系,而不是它们的乘积。
关于c++ - 如何过滤 std::list 并删除与另一个列表相比不匹配的项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65490292/