在多个容器中包含单个数据
Containing single data in multiple containers
我有很多数据要获取和处理(接近一百万),我不想在整个程序中复制或移动它。
让我举个例子来描述一下情况。我有一个包含100.000个元素的Vector。我想记录这些元素插入向量的时间。因此,将时间和数据都保存在Map中是个好主意。但是,我仍然想使用矢量。是否有任何方法可以实现Map的第二个元素显示Vector,但不会不必要地浪费任何资源?
我想到的第一件事是在Vector中包含数据地址。然而,指针使用4个字节(不确定),例如,如果我们想包含char的地址,它比数据本身大4倍。
有什么想法吗?
我认为这不仅仅是内存消耗的问题,也是一致性的问题。这取决于您将如何对原始输入数据使用各种视图。通常,我建议使用std::unique_ptr
作为原始数据,使用std::weak_ptr
作为视图中的参考。
但您是对的,可能会有一定的内存使用开销,因为指针大小超过了指针对象的大小。
对于后一种情况,采用一种FlyWeight模式可能更合适。
在多个容器中包含单个数据
是的,您可以使用Boost多索引容器库以多种方式对相同的数据进行索引,而不会重复内容。与自制的XXX_ptr
解决方案不同,多索引容器还负责保持所有内容的一致性(从容器中删除数据单元会自动将其从所有索引中删除)
根据您的应用程序的要求、特殊性和数据插入/生命周期模式,重量更轻、更专业的解决方案(可能比muklti索引容器和/或自制XXX_ptr
解决方案更高效)也是可能的:
- 你需要原始向量的内存布局保持不变,还是可以容纳某种派生类型的向量
- 你的矢量内容会改变吗?它能生长吗
- 其中的元素会按时间顺序插入和保留吗
- 除了矢量位置外,还需要按插入时间查找矢量元素吗
相关文章:
- pcap_handler回调仅在使用 NPCAP v0.9991 时包含空数据包
- 读取大文件(>2GB)(文本文件包含以太网数据)并通过不同参数随机访问数据的最佳方法是什么?
- 将包含二进制数据的 QByteArray 传递到按值运行
- spdlog 记录单个wchar_t字符串,其中包含包含 {..} 的数据
- 如何使用 mongo-cxx-driver 的 **insert** 函数将包含静态数据的多维数组插入到数据库中
- 创建包含大数据的共享库的最佳实践
- 包含不同数据的类设计
- CLOB 不包含任何数据
- 使用 Cgicc 获取表单数据
- 从文本文件中读取数据并分离出每行中包含的数据
- 如何使用 c++ 和 QT 显示包含动态数据的网页
- 外部应用程序使用共享内存接收消息,但没有包含的数据
- 如何在C++中从命令行获取CGI表单数据
- C++CGI脚本,读取表单数据
- 多个包含简单数据的常量缓冲区 DirectX 11
- 在多个容器中包含单个数据
- VS2010 x64:64位平台VS2010中包含错误数据的对象数组
- 如何加速包含图形数据的文本文件的io/解析
- 比较包含格式化数据的字符串
- c++ rest sdk POST表单数据json