C ++ std :: map ou std :: set - insira duplicados de forma eficiente

Eu tenho um monte de dados cheios de duplicatas e quero eliminar as duplicatas. Você sabe, por exemplo [1, 1, 3, 5, 5, 5, 7] torna-se [1, 3, 5, 7].

Parece que eu posso usar std :: map ou std :: set para lidar com isso. No entanto, não tenho certeza se é mais rápido (a) simplesmente inserir todos os valores no contêiner ou (b) verificar se eles já existem no contêiner e só inserir se não estiverem - as inserções são muito eficientes? Mesmo que haja uma maneira melhor ... você pode sugerir uma maneira rápida de fazer isso?

Outra questão - se os dados que estou armazenando neles não são tão triviais quanto inteiros, e em vez disso é uma classe personalizada, como o std :: map gerencia para armazenar adequadamente (hash?) Os dados para acesso rápido via operador [ ]

questionAnswers(5)

yourAnswerToTheQuestion