如何在向量中找到第一个重复项 - C ++?

时间:2011-04-08 11:27:33

标签: c++ vector

我有一个具有不同值的向量,其中一些可能出现两次。 (只有两次。)
我怎样才能找到第一个重复的项目?

喜欢:[a] [b] [b] [a]
然后我需要'b'。

(抱歉新手问题。)

3 个答案:

答案 0 :(得分:7)

如果您正在寻找相邻的副本,可以使用std::adjacent_find

如果重复项不一定相邻,那么您可以先std::sort向量,然后在结果上使用std::adjacent_find (请参阅@ aix的以下评论)

或者,您可以将每个元素推送到std::set,并在执行时查找碰撞。

答案 1 :(得分:2)

这个问题有很多答案。要查找最佳,请务必了解您的使用方案的背景。例如,首先是确定是否有重复?你打算怎么处理重复搜索的结果?我们可以一直使用矢量的并行结构吗?还有更多...

因此,许多方法中的一种方法是迭代项目,insert将它们转换为std::set<>。查看返回的second的{​​{1}}参数,了解该值是否存在于该集合中,然后您将获得第一个副本并可以摆脱std::pair<> - 添加

答案 2 :(得分:0)

如果您不想使用额外的存储空间,则大致有两种解决方案。第一个是暴力:对于每个元素i,检查它是否等于元素0..i-1。这是O(N*N)(显然最坏的情况:最后两个元素是第一个重复)。

第二种解决方案是通过保持范围0..i来加快搜索速度。排序。你会在排序过程中找到重复的副本。冒泡排序是有效的,因为范围0..i-1已经在前一次迭代中排序。仍为O(N*N)最差情况,但如果范围恰好在之前排序,则为O(N)