我有一个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。
最好使用标准算法std::remove_if
对于考试
lSeedList.erase( std::remove_if( lSeedList.begin(), lSeedList.end(),
[&]( const std::pair<int, double> &p )
{
return sAddedFacets.count( p.first );
} ),
lSeedList.end() );
或类std::list
的成员函数remove_if
例如
lSeedList.remove_if( [&]( const std::pair<int, double> &p )
{
return sAddedFacets.count( p.first );
} );