我有一个时代的向量,并且有许多地方重复时间。时间向量只是来自文本文件的一列数据,来自同一数据文本文件的其他几个向量(速度,位置等)。如何在保留所有其他条目的同时,根据时间删除重复条目?说:
if (time[j] == time[j + 1]
{
do stuff...
}
我实际上有几个向量,所以我也将从它们中删除重复的条目。我需要保留其他向量中的数据顺序(它们不一定是连续的。)
我只想删除连续的重复点。
感谢。
答案 0 :(得分:1)
嗯,你可以做的一个可爱的方法是使用std :: sort对矢量进行排序,然后你可以使用std :: unique从矢量整个范围(.begin()到.end中删除连续的重复项( ))。
你可能找到一种更有效的方法,但这至少是一个有趣的方法,只需要2行代码:)
答案 1 :(得分:1)
正如您所说,重复相互关注,您可以在erase-remove idiom上使用此变体,否则您必须先排序(请参阅std::sort或std::stable_sort)
time.erase(std::unique(time.begin(),time.end()),time.end());
答案 2 :(得分:1)
为什么不避免添加重复项开头? I.E.在将项目添加到向量之前检查项目是否已存在。
答案 3 :(得分: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;
}
}
答案 4 :(得分:0)
我最终只是将数据复制到新的向量,并在此过程中删除重复的条目。