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.