如何在多维向量中删除重复的向量?

6

我有一个向量的向量:

vector< vector<int> > BigVec;

这个问题涉及到任意数量的向量,每个向量的大小也是任意的。我想要删除每个向量中不重复的元素,但是要删除与其他向量完全相同的向量。我不需要保留向量的顺序,因此可以进行排序等操作。

这应该是一个非常简单的问题,但我还是新手,下面是我(不起作用的)最好的尝试:

for (int i = 0; i < BigVec.size(); i++)
  {
     for (int j = 1; j < BigVec.size() ; j++ )
        {
             if (BigVec[i][0] == BigVec [j][i]);
             {
                BigVec.erase(BigVec.begin() + j);
                i = 0;       // because i get the impression deleting a 
                j = 1;       // vector messes up a simple iteration through
             }
        }
  }

我认为可以使用Unique()函数来解决问题,但我也无法让它正常工作。
1个回答

15

为什么不使用unique呢?如果你在使用std::unique时遇到了问题,那是因为使用它需要对范围进行排序。所以,可以像这样:

std::vector<std::vector<int>> myVec;
std::sort(myVec.begin(), myVec.end());
myVec.erase(std::unique(myVec.begin(), myVec.end()), myVec.end());

啊哈,当我之前尝试时,我把语法搞错了。非常感谢。 - David
1
是的,对于std::vector有一个operator<。不过你需要使用带有两个参数的vector::erase函数;你正在使用的只删除一个元素;你需要删除std::unique返回的迭代器之后的所有元素。 - James McNellis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接