我不确定,如果这是发布此问题的正确位置。如果不是,请告诉我。
我有很多'实体'。每个实体都有许多属性(所有实体具有相同数量的属性),这些属性本身存储为数组(长度相同)。我想以这种方式存储'实体',以便我可以按名称获取每个实体。
为此,我应该使用map<string, entity>
按名称存储每个实体。
现在问题是,在此要求(存储多个实体)出现之前,我曾经将实体存储为map<string, vector>
,其中每个向量都是一个属性,字符串表示属性名称。
考虑到这一点map<string, entity>
现在变为:
map<string, map<string, vector>
之前简单而优雅的解决方案变得难以阅读并且难以使用。
将map<string, vector>
封装为实体类似乎为了漂亮的代码而走得太远(因为我没有任何程序可以放入类中)。
使用实体作为结构来“美化”代码会更好吗?
或者我有一个更简单或更优雅的解决方案吗?
或者这个实现是我所希望的最好的?
注意:我正在处理一个相当大的数据集。地图中将有1500-2000个实体。每个实体将具有4-10个属性。每个属性将具有接近10000个值。绩效是一种约束。
答案 0 :(得分:2)
无论如何,我打算建议一个Entity
类或结构。原因是您的实现可能会随着时间的推移而发生变化(例如从map<string, vector<T>>
到multimap<string, T>
,或者可能是unordered_map
),并且为实体提供实际API允许您封装此类更改并将其放入对其他代码处理实体的方式的约束。它还将使代码和可能的编译器错误消息更容易阅读。
如果将类/结构实现完全放在标头中并且不使用virtual
方法,则性能不会受到影响。用Stroustrup的话来说,C ++是一种“轻量级抽象语言”,被解析为“轻量级抽象语言”,这是一个轻量级抽象似乎合适的地方。