c – 在保持顺序的同时从std :: vector中删除/删除重复元素的方法?

参见英文答案 > How to remove duplicates from unsorted std::vector while keeping the original ordering using algorithms?                                    8个
有没有办法在保持顺序的同时从包含字符串元素的向量容器中删除重复元素.

直到现在我已经使用了set方法,但它没有保留顺序.

我不知道如何使用remove_if来解决这个问题.

最佳答案
如何使用临时容器:

std::vector< int >::iterator i , j ;
std::set< int > t_set;
for( i = v.begin() , j = v.begin() ; i != v.end() ; ++i )
    if( t_set.insert( *i ).second) 
        *j++ = *i ;
v.erase( j , v.end() ); 

使用std :: remove_if,我可以想到这个:

std::set<int> t_set;
std::vector<int> res; //Resultant vector

remove_copy_if(v.begin(), v.end(), std::back_inserter(res), 
    [&t_set](int x){ 
        return !t_set.insert(x).second; 
    } );

转载注明原文:c – 在保持顺序的同时从std :: vector中删除/删除重复元素的方法? - 代码日志