Эффективно инициализировать std :: set с помощью последовательности чисел
Очевидный (наивный?) Подход будет:
std::set<int> s;
for (int i = 0; i < SIZE; ++i) {
s.insert(i);
}
Это разумно читаемо, но, насколько я понимаю, не оптимально, поскольку включает в себя многократный поиск позиции вставки и не использует тот факт, что входная последовательность уже отсортирована.
Есть ли более элегантный / эффективный (или де-факто) способ инициализацииstd::set
с последовательностью чисел?
Или, в более общем смысле, как эффективно вставить упорядоченный список записей в коллекцию?
Update:Просматривая документы, я только что заметил конструктор, который принимает итератор для указания позиции для вставки:
iterator insert ( iterator position, const value_type& x );
Что означает, что это будет более эффективным:
std::set<int> s;
std::set<int>::iterator it = s.begin();
for (int i = 0; i < SIZE; ++i) {
it = s.insert(it, i);
}
Это выглядит разумно, но я по-прежнему открыт для новых предложений.