Используйте hash table, в который вы вставляете каждый элемент. Прежде чем вставлять элемент, проверьте, есть ли он там. Если это так, у вас есть дубликат. Это O(n)
в среднем, но худший случай так же плох, как и ваш текущий метод.
В качестве альтернативы вы можете использовать set, чтобы сделать то же самое в O(n log n)
наихудшем случае. Это так же хорошо, как решение для сортировки, за исключением того, что оно не изменяет порядок элементов (использует больше памяти, хотя с момента создания набора).
Другой способ - скопировать вектор в другой вектор, отсортировать его и проверить смежные элементы. Я не уверен, что это быстрее, чем установленное решение, но я думаю, что сортировка добавляет меньше накладных расходов, чем сбалансированные деревья поиска, которые использует набор, поэтому на практике это должно быть быстрее.
Конечно, если вы не заботитесь о сохранении первоначального порядка элементов, просто отсортируйте начальный вектор.
Дубликат [Определение, если неупорядоченный вектор имеет все уникальные элементы] (http://stackoverflow.com/questions/2769174/determining-if-an-unordered-vectort-has-all-unique-elements) –
Can вы меняете вектор? Если нет, у вас есть память для размещения копии? – florin