C ++删除向量中的重复条目

时间:2012-02-20 18:18:20

标签: c++ std

我有一个时代的向量,并且有许多地方重复时间。时间向量只是来自文本文件的一列数据,来自同一数据文本文件的其他几个向量(速度,位置等)。如何在保留所有其他条目的同时,根据时间删除重复条目?说:

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

我实际上有几个向量,所以我也将从它们中删除重复的条目。我需要保留其他向量中的数据顺序(它们不一定是连续的。)

我只想删除连续的重复点。

感谢。

5 个答案:

答案 0 :(得分:1)

嗯,你可以做的一个可爱的方法是使用std :: sort对矢量进行排序,然后你可以使用std :: unique从矢量整个范围(.begin()到.end中删除连续的重复项( ))。

你可能找到一种更有效的方法,但这至少是一个有趣的方法,只需要2行代码:)

答案 1 :(得分:1)

正如您所说,重复相互关注,您可以在erase-remove idiom上使用此变体,否则您必须先排序(请参阅std::sortstd::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)

我最终只是将数据复制到新的向量,并在此过程中删除重复的条目。