我有很多数据需要获取和处理(接近一百万),我不想在整个程序中复制或移动它。
让我用一个例子来描述情况。我有一个100.000元素的Vector。我想跟踪这些元素插入向量的时间。因此,将时间和数据保存在Map中是个好主意。但是,我仍然想使用Vector。 有没有办法实现Map的第二个元素显示Vector而不是不必要地浪费任何资源?
我想到的第一件事是在Vector中包含数据的地址。但是,指针使用4个字节(不确定),例如,如果我们想要包含char的地址,它比数据本身大4倍。
有什么想法吗?
答案 0 :(得分:0)
我说这不仅仅是内存消耗的问题,也是一致性的问题。取决于您将如何在原始输入数据上使用各种视图。一般来说,我建议使用std::unique_ptr
作为原始数据,std::weak_ptr
作为参考。
但是由于指针大小超过了指针对象的大小,你可能会有一定的内存使用开销。
对于后一种情况,有一种FlyWeight模式实现可能更合适。
答案 1 :(得分:0)
在多个容器中包含单个数据
是的,您可以使用the Boost Multi-index Containers Library以多种方式为相同数据编制索引,而不会重复内容。与自制的XXX_ptr
解决方案不同,多索引容器还负责保持一致性(从容器中删除数据单元会自动将其从所有索引中删除。)
根据您的应用程序的要求,特性和数据插入/生命周期模式,可能还可以实现更轻的重量,更专业的解决方案(并且可能比muklti-index容器和/或自制XXX_ptr
解决方案更高效):< / p>