图片我有这个枚举类:
enum class MyEnum {
enum1,
enum2,
enum3
}
我有一个名为MyClass的结构/类...
每个MyClass对象都与一个或多个MyEnum值相关联。
我想要一个容纳MyClass对象的容器,并能够在请求时返回与特定MyEnum值关联的所有MyClass对象的列表。有点像:
class Container<std::vector<MyEnum> key, MyClass item> {
public:
std::vector<MyClass> getMyClassItemListByMyEnumKey(MyEnum enum) {
return /*code to gather all MyClass items that have the searched MyEnum enum*/;
}
};
我可以想到一些以可疑的效率和可伸缩性来执行此操作的方法...但是,有人知道这个问题的现有解决方案吗?这个问题绝对不会超出我所发布的范围,将来也不会考虑。
我使用的是c ++ 17,只要第三方库没有限制性许可证,它们就不会有问题。
答案 0 :(得分:1)
只需将您的需求记录到一个容器中:您想从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
单独管理它们,依此类推。您可以放下更多的兔子洞,具体取决于您要去的地方。