Inicialice eficientemente std :: set con una secuencia de números

Un enfoque obvio (¿ingenuo?) Sería:

std::set<int> s;
for (int i = 0; i < SIZE; ++i) {
    s.insert(i);
}

Eso es bastante legible, pero por lo que entiendo, no es óptimo, ya que implica buscar repetidamente la posición de inserción y no aprovecha el hecho de que la secuencia de entrada ya está ordenada.

¿Existe una forma más elegante / eficiente (o de facto) de inicializar unstd::set con una secuencia de numeros?

O, más genéricamente, ¿cómo se inserta de manera eficiente una lista ordenada de entradas en una colección?

Actualizar:

Mirando a través de los documentos, me he dado cuenta del constructor que acepta un iterador para indicar la posición para la inserción:

iterator insert ( iterator position, const value_type& x );

Lo que significa que esto sería más eficiente:

std::set<int> s;
std::set<int>::iterator it = s.begin();
for (int i = 0; i < SIZE; ++i) {
    it = s.insert(it, i);
}

Eso parece razonable, pero todavía estoy abierto a más sugerencias.

Respuestas a la pregunta(4)

Su respuesta a la pregunta