如何在C++中知道排序的向量是否具有重复值

Vat*_*rma 2 c++ stl vector

我不想更改矢量或创建一个删除了重复项的新矢量.我只想检查重复项,例如:

{90, 80, 70, 60, 50, 40, 30, 20, 10, 10} -> true
{90, 89, 88, 87, 86, 85, 84, 83, 82, 81} -> false
Run Code Online (Sandbox Code Playgroud)

bla*_*ead 7

由于矢量已排序,您可以检查两个相邻元素是否相等:

for (auto it = vec.begin() + 1; it != vec.end(); ++it)
{
  if (vec[it] == vec[it - 1])
  {
    // duplicate
    return true;
  }
}
// no duplicate
return false;
Run Code Online (Sandbox Code Playgroud)

你也可以使用std :: adjacent_find,它将迭代器返回到向量中第一个副本的第一个元素:

auto it = std::adjacent_find(vec.begin(), vec.end());
if (it == vec.end())
{
  // no duplicate
  return false;
}
// duplicate
return true;
Run Code Online (Sandbox Code Playgroud)