消除std :: vector中的重复项

ste*_*fan 1 c++ algorithm stdvector

我有一个非常大的std :: vector std :: vectors,它包含固定数量的无符号整数.

所有uint向量都按升序排序.

我目前消除重复向量的方法是

unsigned int i = 0;
while ( i < new_combs.size() )
{
  unsigned int j = i + 1;
  while ( j < new_combs.size() )
  {
     unsigned int k = 0;
     while ( k < new_combs.at(i).size() && new_combs.at(i).at(k) == new_combs.at(j).at(k) )
        ++k;
     if ( k == new_combs.at(j).size() )
        new_combs.erase(new_combs.begin() + j);
     else
        ++j;
  }
  ++i;
}
Run Code Online (Sandbox Code Playgroud)

这里,new_combs是包含如上所述的向量的向量.

如果向量矢量未排序,是否有更有效的方法来消除重复?

Luc*_*ore 9

一种较短的方式是使用<algorithm>:

std::sort(new_combs.begin(), new_combs.end());
new_combs.erase(std::unique(new_combs.begin(), new_combs.end()), new_combs.end());
Run Code Online (Sandbox Code Playgroud)

除非您特别需要std::vector,否则您可以使用std::set以避免重复.

  • @stefan std :: sort在最坏的情况下是O(n ^ 2).这是一个快速排序,通常是O(n*log(n)). (2认同)