比map <string,map <string,=“”vector =“”> </string,>更好

时间:2014-02-19 12:41:30

标签: c++ vector map

我不确定,如果这是发布此问题的正确位置。如果不是,请告诉我。

我有很多'实体'。每个实体都有许多属性(所有实体具有相同数量的属性),这些属性本身存储为数组(长度相同)。我想以这种方式存储'实体',以便我可以按名称获取每个实体。

为此,我应该使用map<string, entity>按名称存储每个实体。

现在问题是,在此要求(存储多个实体)出现之前,我曾经将实体存储为map<string, vector>,其中每个向量都是一个属性,字符串表示属性名称。

考虑到这一点map<string, entity>现在变为:  map<string, map<string, vector>

之前简单而优雅的解决方案变得难以阅读并且难以使用。

  • map<string, vector>封装为实体类似乎为了漂亮的代码而走得太远(因为我没有任何程序可以放入类中)。

  • 使用实体作为结构来“美化”代码会更好吗?

  • 或者我有一个更简单或更优雅的解决方案吗?

  • 或者这个实现是我所希望的最好的?

注意:我正在处理一个相当大的数据集。地图中将有1500-2000个实体。每个实体将具有4-10个属性。每个属性将具有接近10000个值。绩效是一种约束。

1 个答案:

答案 0 :(得分:2)

无论如何,我打算建议一个Entity类或结构。原因是您的实现可能会随着时间的推移而发生变化(例如从map<string, vector<T>>multimap<string, T>,或者可能是unordered_map),并且为实体提供实际API允许您封装此类更改并将其放入对其他代码处理实体的方式的约束。它还将使代码和可能的编译器错误消息更容易阅读。

如果将类/结构实现完全放在标头中并且不使用virtual方法,则性能不会受到影响。用Stroustrup的话来说,C ++是一种“轻量级抽象语言”,被解析为“轻量级抽象语言”,这是一个轻量级抽象似乎合适的地方。