2010-03-25 64 views
3

我有向量的向量:如何刪除多維向量內的重複向量?

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(),但我無法讓它工作。

回答

6

爲什麼不使用獨特?我認爲如果你在使用它的過程中遇到問題,這是因爲使用std::unique要求對該範圍進行排序。所以,像

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

啊哈,我得到的語法錯誤,當我嘗試它。非常感激。 – David 2010-03-25 04:00:08

+1

是的,'std :: vector'有一個'operator <'。不過,您需要使用具有兩個參數的'vector :: erase';你正在使用的只刪除一個元素;你需要刪除'std :: unique'返回的迭代器之後的所有元素。 – 2010-03-25 04:02:38

+0

@詹姆斯麥克奈利斯:謝謝。固定。 – 2010-03-25 04:04:18