Помимо наихудших операционных сложностей, и map & set (и все ассоциативные контейнеры Orderer / Sorted в стандартной библиотеке C ++) обладают очень важным свойством: их элементы всегда сортируются в порядке по ключу (согласно компаратору).
Самобалансирующееся дерево бинарного поиска удовлетворяет сложностям работы, и единственный обход, который даст вам элементы в отсортированном порядке, это, как вы уже догадались, в порядке единица.
NicolОтвет Боласа дает вам более подробную информацию об обычной реализации.Если вам интересно увидеть такую реализацию, вы можете взглянуть на реализацию RDE STL .Это намного легче читать, чем то, что вы найдете в своей обычной реализации стандартной библиотеки C ++.В качестве примечания, обе реализации set и map в RDESTL имеют только прямой итератор (не двунаправленный, как гласит стандарт), но разобраться с частью - довольно просто.