Очевидным (наивным?) подходом было бы:
std::set<int> s;
for (int i = 0; i < SIZE; ++i) {
s.insert(i);
}
Это разумно читаемое, но из того, что я понимаю, не оптимально, поскольку оно требует многократного поиска позиции вставки и не использует преимущества того, что входная последовательность уже отсортирована.
Есть ли более элегантный/эффективный (или де-факто) способ инициализации std::set
с последовательностью чисел?
Или, в общем, как эффективно вставить упорядоченный список записей в коллекцию?
Обновление:
Просматривая документы, я только что заметил конструктор, который принимает итератор, чтобы указать позицию для вставки:
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);
}
Это выглядит разумно, но я по-прежнему открыт для большего количества предложений.