Я столкнулся с той же проблемой в другом контексте.Кажется, что STL и Boost не предоставляют упорядоченный контейнер, который имеет произвольный доступ для использования порядка (например, для сравнения).
Мое (не очень красивое) решение состояло в том, чтобы использовать класс, который выполнялвход и «отфильтровывают» его в комплекте.После завершения операции ввода он просто скопировал все итераторы набора в вектор и использовал его для произвольного доступа.
Это решение работает только в очень ограниченном контексте: ввод для контейнера выполняется один раз.Если вы снова измените add на контейнер, все итераторы придется скопировать снова.Это действительно было очень неуклюже в использовании, но сработало.