Sprawnie inicjuj std :: set z sekwencją liczb

Oczywistym (naiwnym?) Podejściem byłoby:

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

Jest to rozsądne do odczytania, ale z tego, co rozumiem, nie jest optymalne, ponieważ wymaga wielokrotnego wyszukiwania pozycji wstawiania i nie wykorzystuje faktu, że sekwencja wejściowa jest już posortowana.

Czy istnieje bardziej elegancki / skuteczny (lub de facto) sposób inicjalizacjistd::set z sekwencją liczb?

Lub, bardziej ogólnie, w jaki sposób można efektywnie wstawić uporządkowaną listę wpisów do kolekcji?

Aktualizacja:

Przeglądając dokumenty, zauważyłem konstruktora, który akceptuje iterator, aby wskazać pozycję do wstawienia:

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

Co oznacza, że ​​byłoby to bardziej wydajne:

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

Wygląda to rozsądnie, ale nadal jestem otwarty na więcej sugestii.

questionAnswers(4)

yourAnswerToTheQuestion