我有一个类,比如说Person,它是由另一个类/模块管理的,比如说PersonPool。
我的应用程序中还有另一个模块,例如模块M,它希望以最有效的方式将信息与人相关联。我考虑了以下替代方案:
在最后一个替代方案中,可以通过使用稀疏 vector 来解决该问题,但是我不知道稀疏 vector 的实现是否非常有效(比map / hashmap更快)。
还有其他方法可以做到这一点吗?
还是有一种有效的稀疏 vector 可以解决最后一种选择的内存问题?
最佳答案
第一种和第三种是合理的通用技术。第二个是动态编程语言(例如Python和Javascript)如何实现对象的成员数据,因此不要以不可思议的慢速将其释放。第四点与关系数据库的工作原理相同。使关系数据库像拍板一样运行是可能的,但是很困难。
简而言之,您已经描述了4种广泛使用的技术。排除其中任何一种的唯一方法是针对您问题的详细信息(所需的性能,人员数,属性数,代码中要执行此操作的模块数等)以及相应的度量。
模块M的另一种可能性是定义一个从Person继承的类,并添加额外的数据成员。这里的原理是M的人的观念与Person的人的观念不同,因此将M的观念描述为一个类。当然,仅当在同一Person对象上运行的所有其他模块都通过多态性来这样做时,这才起作用,此外,如果可以使M负责创建对象(也许通过工厂的依赖注入(inject)),那么这才起作用。这是一个很大的“如果”。甚至更大的一个,如果除了M之外不需要对对象进行任何生命周期的操作,那么您可能可以使用组合或私有(private)继承优先于公共(public)继承。但是,如果模块N要创建人员集合,然后模块M想要向他们附加额外的数据,则没有任何用处。
关于c++ - 向实例添加数据的最有效方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2396106/