使用std :: unique和vector.erase删除除最后一次出现的重复元素之外的所有内容

时间:2014-01-11 09:24:50

标签: c++ vector stl unique erase

如何有效地删除稳定排序向量的所有重复项,同时保持最后一个元素而不是第一个?

通过这样做来保持第一个是相当简单的:

auto it = std::unique( vector.begin(), vector.end() ,[](string a, string b){ return ! (a.compare(b));});
vector.erase(it,vector.end());

但是我不知道如何在保留最后一个重复元素的同时做同样的事情。 它可以用反向迭代器完成,从向量的末尾开始独特的搜索过程,但是我在使用擦除函数时遇到了麻烦。

编辑: 我通过修改排序方法找到了解决方案。保留第一个副本现在就足够了。

1 个答案:

答案 0 :(得分:2)

auto it = std::unique( vector.rbegin(), vector.rend() ,[](string a, string b){ return ! (a.compare(b));});
vector.erase(vector.begin(),it.base());