How to remove duplicates from unsorted std::vector while keeping the original ordering using algorithms?(如何在使用算法保持原始排序的同时从未排序的 std::vector 中删除重复项?)
问题描述
我有一个整数数组,我需要从中删除重复项,同时保持每个整数第一次出现的顺序.我可以看到这样做,但想象有更好的方法可以更好地利用 STL 算法?插入超出了我的控制范围,因此我无法在插入之前检查重复项.
I have an array of integers that I need to remove duplicates from while maintaining the order of the first occurrence of each integer. I can see doing it like this, but imagine there is a better way that makes use of STL algorithms better? The insertion is out of my control, so I cannot check for duplicates before inserting.
如何使用 STL 算法做到这一点?
How can this be done using STL algorithms?
推荐答案
naive 的方法是使用 std::set
就像每个人都告诉你的那样.它是矫枉过正并且缓存局部性很差(慢).
smart* 方法是适当地使用 std::vector
(确保看到底部的脚注):
The naive way is to use std::set
as everyone tells you. It's overkill and has poor cache locality (slow).
The smart* way is to use std::vector
appropriately (make sure to see footnote at bottom):
然后你可以像这样使用它:
Then you can use it like:
*注意:这是在典型情况下的聪明方法,其中重复的数量不会太高.如需更全面的性能分析,请参阅this related answer to a related question.
*Note: That's the smart way in typical cases, where the number of duplicates isn't too high. For a more thorough performance analysis, see this related answer to a related question.
这篇关于如何在使用算法保持原始排序的同时从未排序的 std::vector 中删除重复项?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!