我不知道,这是否是发表这个问题的合适地点。如果不是,请告诉我。
我有很多“实体”。每个实体都有许多属性(所有实体都有相同数量的属性),它们本身存储为数组(长度相同)。我希望以这样的方式存储‘实体’,这样我就可以按名称获取每个实体。
要做到这一点,我可能应该使用一个map<string, entity>来存储每个实体的名称。
现在的问题是,在这个需求(存储多个实体)出现之前,我通常将一个实体存储为一个map<string, vector>,其中每个向量都是一个属性,字符串表示属性名。
考虑到这一点,map<string, entity>现在变成:map<string, map<string, vector>
以前是一个简单而优雅的解决方案,现在已经变得很难阅读,使用起来也很尴尬。
map<string, vector>封装为一个实体类似乎太过分了(因为我没有任何程序可以放在类中)。注意:我正在处理一个相当大的数据集。地图上将有1500-2000个实体。每个实体都有4-10个属性。每个属性的值将接近10000。性能是一个制约因素。
发布于 2014-02-19 12:49:54
无论如何,我将建议一个Entity类或结构。原因是您的实现可能会随着时间的推移而改变(例如,从map<string, vector<T>>到multimap<string, T>,或者可能是unordered_map),并且给实体一个实际的API允许您封装这些更改,并在其他代码处理实体的方式上施加约束。它还将使代码和可能的编译器错误消息更易于阅读。
如果将类/结构实现完全放在头中而不使用virtual方法,那么性能就不会受到影响。用Stroustrup的话来说,C++是一种“轻量级抽象语言”,可以被解析为“轻量级抽象语言”,这是轻量级抽象似乎合适的地方。
https://stackoverflow.com/questions/21880797
复制相似问题