C++ 从无序集合中删除列表元素
我有一个C++ 从无序集合中删除列表元素,c++,algorithm,list,linked-list,openmp,C++,Algorithm,List,Linked List,Openmp,我有一个列表lSeedList和一个无序设置sToDelete。我想删除列表中第一个成员等于sToDelete中int的对。目前我正在使用以下代码: void updateSL(list<pair<int, double> >& lSeedList, const unordered_set<int>& sAddedFacets) { list<pair<int, double> >::iterator it =
列表lSeedList
和一个无序设置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;
}
}
void updateSL(列表和lSeedList、常量无序集和sAddedFacets)
{
list::iterator it=lSeedList.begin();
while(it!=lSeedList.end())
{
if(sAddedFacets.count(it->first)!=0)
它=lSeedList.erase(它);
其他的
++它;
}
}
有没有办法加速这个代码?是否可以使用OpenMP高效地将其并行化(在每个线程中划分列表,然后将它们与splice合并)
我正在Windows7下使用VisualStudio2010。lSeedList的大小在开始时约为100万,sToDelete的大小约为10000。这对中的int就像一个唯一的ID。如果 例如
lSeedList.erase( std::remove_if( lSeedList.begin(), lSeedList.end(),
[&]( const std::pair<int, double> &p )
{
return sAddedFacets.count( p.first );
} ),
lSeedList.end() );
你应该调查一下,这正是你拍摄的目的。@Cyril请看我更新的帖子。首先,它在lambda表达式中有一个输入错误:)我用一个struct实现了第二个选项,信不信由你,我的代码显然要快一点:)我将尝试使用布尔向量的其他方法。谢谢你的帮助!
lSeedList.remove_if( [&]( const std::pair<int, double> &p )
{
return sAddedFacets.count( p.first );
} );