从排序的std :: vector中删除具有相同键的最后一个元素的最简洁方法是什么?

Vio*_*ffe 1 c++ stl vector

我有一个结构向量{key; value},按键排序:

{ {0, 1}, {0, 2}, {1, 1}, {1, 2}, {1, 3}, {2, 1}, {2, 2} }

我需要使用相同的键擦除除最后一个元素之外的所有元素.结果应该是:

{ {0, 2}, {1, 3}, {2, 2} }

最简洁的方法是什么?我可以使用哪种STL算法?显然,此任务不适合删除 - 擦除习惯用法.

Oli*_*rth 8

一个天真但有效的解决方案是迭代向量,将相关元素复制到新的向量中.

另一种方法是使用std::unique(使用适当的谓词).由于您希望保留每个组中的最后一个元素,因此您需要使用反向迭代器.

  • 一种可能性是`std :: set <std :: pair <int,int >> uniques {input.rbegin(),input.rend()};`简洁,但不一定是效率最高的. (2认同)