пока что такой (c - контейнер, содержащий элементы):
Code:
#include <algorithm>
using namespace std;
sort(c.begin(), c.end());
c.erase(unique(c.begin(), c.end()), c.end());
сложность - n * log n + n (т.е. фактически n * log n). но! результирующая последовательность будет отсортирована.
или:
Code:
#include <algorithm>
using namespace std;
for(C::iterator it = c.begin(), end = c.end(); it != end; ++it)
{
end = remove(it + 1, end, *it);
}
c.erase(end, c.end());
сложность - n(n+1)/2, т.е. n^2. зато без сортировки.
сложность erase-а в обоих случаях не учитывалась, но она добавит всего лишь слагаемое n.