2014-01-11 95 views
0

如何有效地刪除穩定排序向量的所有重複項,同時保持最後一個元素的順序而不是第一個?使用std :: unique和vector.erase刪除除最後一次出現的重複元素

這是相當簡單的做,以保持第一位:

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

但我不知道如何做同樣的,同時保持過去的重複的元素。 它可能可以用反向迭代器完成,從矢量的末尾開始獨特的搜索過程,但我無法將其與使用擦除功能相結合。

編輯: 我通過修改排序方法找到了解決方案。現在保留第一個副本就足夠了。

+0

'std :: unique'使用'ForwardIterators'和'operator ++'來完成它的目標。非常簡單的實現[這裏](http://www.cplusplus.com/reference/algorithm/unique/)。 但是,爲什麼會這麼重要,如果你刪除了第一個或最後一個出現的元素被稱爲「equal」? – Raja

+0

我正在實現一個自定義地圖類型,我只想保留同一個鍵的最後一個初始化元素。 – Veritas

回答

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

std :: erase不允許參數的反向迭代器。 – Veritas

+0

@Veritas你是對的。我修好了它 – sliser

相關問題