Это, к сожалению, невозможно, в том виде, как вы это выражаете.
С другой стороны, мне кажется, что (учитывая ваши требования) вы могли бы перевернуть хранилище.
Чтоесли вы использовали list
из Values
, а затем указали карту на этот список?
Это нарушило бы циклическую зависимость.
typedef std::list< std::pair<Key, Value> > ListType;
typedef std::multiset<typename ListType::iterator, CmpFirst> MapType;
(Не уверен, если яправда, понял, чего вы пытались достичь ...)
Другое решение, которое вам, вероятно, следует рассмотреть, - это посмотреть, сможете ли вы выразить это в терминах Boost.MultiIndex .Когда необходимо несколько итераций / шаблонов поиска, Boost.MultiIndex часто является лучшей альтернативой, чем решение ручной работы, поскольку оно чередует индексы внутри значений, чтобы минимизировать объем хранилища.Плюс согласованность (т. Е. Наличие всех индексов, ссылающихся на один и тот же набор элементов) является заданной.