在多个容器中包含单个数据

时间:2013-07-31 19:10:35

标签: c++ vector alias

我有很多数据需要获取和处理(接近一百万),我不想在整个程序中复制或移动它。

让我用一个例子来描述情况。我有一个100.000元素的Vector。我想跟踪这些元素插入向量的时间。因此,将时间和数据保存在Map中是个好主意。但是,我仍然想使用Vector。 有没有办法实现Map的第二个元素显示Vector而不是不必要地浪费任何资源?

我想到的第一件事是在Vector中包含数据的地址。但是,指针使用4个字节(不确定),例如,如果我们想要包含char的地址,它比数据本身大4倍。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

我说这不仅仅是内存消耗的问题,也是一致性的问题。取决于您将如何在原始输入数据上使用各种视图。一般来说,我建议使用std::unique_ptr作为原始数据,std::weak_ptr作为参考。

但是由于指针大小超过了指针对象的大小,你可能会有一定的内存使用开销。

对于后一种情况,有一种FlyWeight模式实现可能更合适。

答案 1 :(得分:0)

  

在多个容器中包含单个数据

是的,您可以使用the Boost Multi-index Containers Library以多种方式为相同数据编制索引,而不会重复内容。与自制的XXX_ptr解决方案不同,多索引容器还负责保持一致性(从容器中删除数据单元会自动将其从所有索引中删除。)

根据您的应用程序的要求,特性和数据插入/生命周期模式,可能还可以实现更轻的重量,更专业的解决方案(并且可能比muklti-index容器和/或自制XXX_ptr解决方案更高效):< / p>

  • 您是否需要原始矢量的内存布局保持不变,或者您是否可以容纳某种派生类型的矢量?
  • 你的矢量内容会改变吗?它能成长吗?
  • 无论如何,其中的元素是否按时间顺序排列(插入和保存)?
  • 除了向量位置之外,您还需要通过插入时间查找向量元素吗?