То, что вы пытаетесь сделать, это на самом деле не поддерживается языком, и в то время как вы можете заставить его работать, это не будет простым или изящным. Подход, предложенный sftrabbit (после того, как вы исправите синтаксис :)), может получить вас на полпути, но для итерации потребуется создание посетителя, возможно, с помощью функтора, который будет применяться к элементам; чтобы иметь возможность использовать его внутри заказанного контейнера, вам нужно будет обернуть его типом, который обеспечивает заказ ...
Другая проблема с вашим предполагаемым дизайном заключается в том, что std::set
не позволяет изменять вложенные элементы, которые в основном означает, что после добавления контейнеров в std::set
они становятся неизменными. Если это нормально, вы можете использовать другой подход и просто поддерживать std::vector<ElementType*>
, чтобы указать на все существующие элементы после включение во внешний std::set
. Это позволит вам выполнять более простую линейную настройку по всем элементам.
Более простое решение может быть создание класса, который заменяет внешний контейнер и внутри имеет две разные std::set
(опять же при условии, что неизменность не является проблемой, или другой контейнер, если это необходимо), один для каждого вложенного контейнера:
class Container {
std::set<std::vector<Type>> d_vectors;
std::set<std::map<Key,Type>> d_maps;
...
Тогда тип Container
может содержать функции, которые проходят через внутренние контейнеры.
С другой стороны, возможно, вам захочется вернуться к исходной проблеме и выяснить, есть ли более простые подходы, которые не нужны в первую очередь ... и, вероятно, более чистые.
Итак, вам нужен 'std :: set>'? –
На самом деле не имеет смысла. Набор упорядочен, что означает, что вам нужно заказывать векторы относительно карт. – MSalters