【发布时间】:2014-01-11 09:24:49
【问题描述】:
如何有效地删除稳定排序向量的所有重复项,同时保持最后一个元素而不是第一个元素的顺序?
保持第一个相当简单:
auto it = std::unique( vector.begin(), vector.end() ,[](string a, string b){ return ! (a.compare(b));});
vector.erase(it,vector.end());
但我不确定如何在保留最后一个重复元素的同时做同样的事情。 它可能可以使用反向迭代器来完成,从向量的末尾开始唯一的搜索过程,但我无法将它与擦除函数的使用结合起来。
编辑: 我通过修改排序方法找到了解决方案。现在保留第一个副本就足够了。
【问题讨论】:
-
std::unique使用ForwardIterators和operator++来实现其目标。非常简单的实现here。但是,如果元素被称为equal,那么如果您删除了第一个或最后一个匹配项,那又有什么关系呢? -
我正在实现一个自定义地图类型,我只想保留同一个键的最后一个初始化元素。
标签: c++ vector stl unique erase