Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从无序集合中删除列表元素_C++_Algorithm_List_Linked List_Openmp - Fatal编程技术网

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 );
                     } );