是否可以使用向量 作为值来定义unordered_map?

问题描述 投票:0回答:1

我有一个矢量模式,其吸气剂是这样的:

vector<A>& getA() const { return a; }
vector<B>& getB() const { return b; }
vector<C>& getC() const { return c; }
...

我很喜欢具有某种功能,例如vector<T>& getByName(string s) const,所以我可以这样调用该功能:getByName("A")getByName("B"),依此类推。

我已经尝试过使用无序地图,但是我没有找到任何合适的方法来制作像这样的线:unordered_map< string, vector<T> >

A,B,C ...是完全不同的结构,因此多态解决方案不是我要寻找的。

由于vector<T>是一个具有固定大小的容器(如果我没记错,则为24字节),所以我不明白为什么无论向量的类型如何,映射都无法将那些字节存储在内存中的某个位置。

c++ templates vector stl unordered-map
1个回答
0
投票

由于向量是一个具有固定大小的容器(如果我没记错,则为24字节),所以我不明白为什么无论向量的类型如何,映射都无法将那些字节存储在内存中的某个位置。

因为C ++是强类型语言,并且类型vector<A>vector<B>vector<C>是相同的size并不重要,因为它们是不同的types

pair<int16_t, int16_t>的大小与int32_t相同(在大多数实现中,但这不能使它们互换)。>

您可能(我想)有一个map<string, variant<...>或一个map<string, any>,但这将需要您自己管理所有类型。

[稍后]

我很喜欢具有某种功能,例如vector<T>& getByName(string s)

这种函数的问题是,您必须(在编译时)指定函数将返回的类型。您希望返回类型由运行时传递给函数的参数的值确定。

© www.soinside.com 2019 - 2024. All rights reserved.