С установленным контейнером STL вы никогда не получите O (1) раз.Вы можете сократить время выполнения, используя конструктор set(InputIterator f, InputIterator l, const key_compare& comp)
и передавая пользовательский итератор, который выполняет итерацию по заданному целочисленному диапазону.Причина, по которой это может выполняться быстрее (зависит от реализации stl, компилятора и т. Д.), Заключается в том, что вы уменьшаете глубину стека вызовов.В своем фрагменте вы проходите весь путь от вызова .insert () до фактической вставки и обратно для каждого целого числа.Используя альтернативный конструктор, ваша операция приращения перемещается вниз во фрейм, в который выполняется вставка.Операция приращения теперь будет иметь возможные накладные расходы при вызове функции, если ваш компилятор не сможет встроить его.Вы должны сравнить это, прежде чем использовать этот подход.Это может быть медленнее, если ваша реализация stl имеет неглубокий стек вызовов для .insert ().
В общем, хотя, если вам нужен набор непрерывного диапазона целых чисел, вы можете увидеть значительное увеличение производительности, реализовавспециализированный набор классов, который может хранить и сравнивать только верхнюю и нижнюю границы каждого набора.