我有一個向量的時間,並有一些時間重複的地方。時間向量只是文本文件中的一列數據,還有其他幾個來自同一數據文本文件的向量(速度,位置等)。我如何根據時間刪除重複條目,同時保留所有其他條目?說:C++刪除向量中的重複項
if (time[j] == time[j + 1]
{
do stuff...
}
我實際上有幾個向量,所以我會從他們刪除重複的條目以及。我需要保存在其它矢量數據的順序(它們不一定是連續的。)
我只想刪除連續重複點。
謝謝。
我有一個向量的時間,並有一些時間重複的地方。時間向量只是文本文件中的一列數據,還有其他幾個來自同一數據文本文件的向量(速度,位置等)。我如何根據時間刪除重複條目,同時保留所有其他條目?說:C++刪除向量中的重複項
if (time[j] == time[j + 1]
{
do stuff...
}
我實際上有幾個向量,所以我會從他們刪除重複的條目以及。我需要保存在其它矢量數據的順序(它們不一定是連續的。)
我只想刪除連續重複點。
謝謝。
嗯,你可以做到這一點是使用std ::排序排序的載體,然後你可以使用std ::唯一從載體去除連續重複整個範圍(.begin一個可愛的方式()來.END ())。
你也許可以找到一個更有效的方式,但是這至少是一個有趣的,並且只需要2行代碼:)
我實際上有幾個向量,所以我將從它們中刪除重複的條目。我需要保存在其它矢量數據的順序(它們不一定是連續的。) – user1187621 2012-02-20 18:22:29
至於你說的重複遵循海誓山盟,您可以使用在erase-remove idiom這種變化,否則,你就必須先解決(見std::sort或std::stable_sort)
time.erase(std::unique(time.begin(),time.end()),time.end());
的std ::唯一在VC++ 2010 – user1187621 2012-02-20 18:26:27
不出來,我@ user1187621:你必須包含''
這個工作,除了當我去其他向量上使用這種方法時,我最終刪除了更多的「重複」數據點比我超出時間向量。我只想刪除連續的重複點。 – user1187621 2012-02-20 18:37:01
爲什麼不只是避免增加重複開始與? I.E.在將其添加到向量之前檢查該項目是否已經存在。
我正在閱讀來自文本文件的數據,而我正在閱讀的方式並未真正設置爲檢查值是否相同。 – user1187621 2012-02-20 18:30:32
如果順序必須被保存和複製是不連續的:
{
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;
}
}
我最終只是將數據複製到一個新的載體,沿途刪除重複的條目。
你只想刪除_consectutive_ duplicates或所有重複? – 2012-02-20 18:43:49
連續重複。 – user1187621 2012-02-20 19:04:12