2012-02-20 96 views
2

我有一個向量的時間,並有一些時間重複的地方。時間向量只是文本文件中的一列數據,還有其他幾個來自同一數據文本文件的向量(速度,位置等)。我如何根據時間刪除重複條目,同時保留所有其他條目?說:C++刪除向量中的重複項

if (time[j] == time[j + 1] 
{ 
    do stuff... 
} 

我實際上有幾個向量,所以我會從他們刪除重複的條目以及。我需要保存在其它矢量數據的順序(它們不一定是連續的。)

我只想刪除連續重複點。

謝謝。

+0

你只想刪除_consectutive_ duplicates或所有重複? – 2012-02-20 18:43:49

+0

連續重複。 – user1187621 2012-02-20 19:04:12

回答

1

嗯,你可以做到這一點是使用std ::排序排序的載體,然後你可以使用std ::唯一從載體去除連續重複整個範圍(.begin一個可愛的方式()來.END ())。

你也許可以找到一個更有效的方式,但是這至少是一個有趣的,並且只需要2行代碼:)

+0

我實際上有幾個向量,所以我將從它們中刪除重複的條目。我需要保存在其它矢量數據的順序(它們不一定是連續的。) – user1187621 2012-02-20 18:22:29

1

至於你說的重複遵循海誓山盟,您可以使用在erase-remove idiom這種變化,否則,你就必須先解決(見std::sortstd::stable_sort

time.erase(std::unique(time.begin(),time.end()),time.end()); 
+0

的std ::唯一在VC++ 2010 – user1187621 2012-02-20 18:26:27

+1

不出來,我@ user1187621:你必須包含''頭。 Afaik它是一個pre-C++ 11庫,所以VS2010應該有它(儘管如此,不能驗證自己)。 – KillianDS 2012-02-20 18:30:55

+0

這個工作,除了當我去其他向量上使用這種方法時,我最終刪除了更多的「重複」數據點比我超出時間向量。我只想刪除連續的重複點。 – user1187621 2012-02-20 18:37:01

1

爲什麼不只是避免增加重複開始與? I.E.在將其添加到向量之前檢查該項目是否已經存在。

+0

我正在閱讀來自文本文件的數據,而我正在閱讀的方式並未真正設置爲檢查值是否相同。 – user1187621 2012-02-20 18:30:32

1

如果順序必須被保存和複製是不連續的:

{ 
    auto i = time.begin() 
    std::set<time::value_type> exists; 
    while(i != time.end()) { 
     if (exists.insert(*i).second == false) //it's a duplicate: 
      i = time.erase(i); 
     else //else not a duplicate 
      ++i; 
    } 
} 
0

我最終只是將數據複製到一個新的載體,沿途刪除重複的條目。