Простое преобразование ваших требований в контейнер: вы хотите перейти от Enum
к группе MyClass
объектов:
map<Enum, vector<MyClass>>
Хотя это не совсем правильно, поскольку вы действительно хотите потенциальноподелиться MyClass
объектов среди нескольких ключей.Итак:
map<Enum, vector<shared_ptr<MyClass>>>
Это выполнит работу, но у вас могут возникнуть вопросы по поводу производительности.Если все ваши значения Enum
равны [0, n-1)
, а производительность становится проблемой, возможно, стоит просто обернуть vector
:
class CustomMap {
std::vector<shared_ptr<MyClass>> elems;
public:
CustomMap() {
elems.resize(n);
}
std::vector<shared_ptr<MyClass>>& operator[](Enum e) {
return elems[static_cast<std::underlying_type_t<Enum>>(e)];
}
// etc.
};
И тогда, конечно, shared_ptr
на самом деле неПравильно и для работы - вы, вероятно, захотите иметь vector<MyClass*>
такой, чтобы CustomMap
управлял ими по отдельности и т. д. В зависимости от того, куда вы хотите пойти, вы можете пробить гораздо больше кроличьих норе.