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.