Нет; сбалансированное дерево не нужно хранить количество потомков каждого узла, что требуется для более быстрого вычисления distance( s.begin(), iter )
для std::set s
и итератора iter
(что, как вы полагаете, означает). Поэтому информация просто не существует, кроме как путем подсчета элементов по одному.
Если вам нужно выполнить много таких вычислений, скопируйте set
в отсортированную последовательность случайного доступа, такую как vector
или deque
, но затем модификация последовательности становится дорогой.
Структура дерева данных, которая делает то, что вы просите, вероятно, существует в свободной библиотеке где-то, но я не знаю об этом.