【发布时间】:2014-12-03 13:44:02
【问题描述】:
我有一个list<pair<int , double>> lSeedList 和一个unordered_set<int> sToDelete。我想删除列表中第一个成员等于 sToDelete 中的 int 的对。目前我正在使用以下代码:
void updateSL(list<pair<int, double> >& lSeedList, const unordered_set<int>& sAddedFacets)
{
list<pair<int, double> >::iterator it = lSeedList.begin();
while(it != lSeedList.end())
{
if(sAddedFacets.count(it->first) != 0)
it = lSeedList.erase(it);
else
++it;
}
}
有没有办法加快这段代码的速度?是否可以使用 OpenMP 有效地并行化它(在每个线程中划分列表,然后将它们与拼接合并)?
我在 Windows 7 下使用 Visual Studio 2010。开始时 lSeedList 的大小约为 100 万,而 sToDelete 的大小约为 10000。对中的 int 就像一个唯一的 ID。
【问题讨论】:
-
您应该查看
erase-removeidiom,这基本上就是您的目标。 -
@Cyril 查看我更新的帖子。起初它在 lambda 表达式中有一个错字。:)
标签: c++ algorithm list linked-list openmp