Inicialize eficientemente std :: set com uma sequência de números

Uma abordagem óbvia (ingênua?) Seria:

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

Isso é razoavelmente legível, mas pelo que entendi, não é ideal, pois envolve pesquisar repetidamente a posição de inserção e não se aproveita do fato de que a sequência de entrada já está classificada.

Existe uma maneira mais elegante / eficiente (ou de fato) de inicializarstd::set com uma seqüência de números?

Ou, mais genericamente, como alguém insere eficientemente uma lista ordenada de entradas em uma coleção?

Atualizar:

Examinando os documentos, acabei de notar o construtor que aceita um iterador para indicar a posição da inserção:

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

O que significa que isso seria mais eficiente:

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

Isso parece razoável, mas ainda estou aberto a mais sugestões.

questionAnswers(4)

yourAnswerToTheQuestion