我有一个巨大的表(约 50Gb),格式为(i,j,k)(来自稀疏矩阵),存储为
uint32_t * idx1, * idx2;
float * vals;
uint32_t tablesize;
我想使用给定的比较函数(即 idx1 和 idx2 的函数)对其进行排序。这可以使用 std::sort 来完成吗?
具体来说,稀疏矩阵中值为 v 的每个非零条目 (i,j) 都通过将 i 放入 idx1、j 放入 idx2、将 v 放入 vals 中的相应条目来存储。然后我想根据 (i1, j1, v1)
(i1 < i2) || (i1==i2 && j1 <= j2)
我能够收集到的在非标准数据类型上使用 std::sort 的示例假设要比较的每个项目都是类的单个实例;这里每个项目由不同数组中的三个值表示。
不幸的是很难说服std::sort
或任何标准库,用于处理条带数据。它的设计假设数据可以通过单个复制=
,通过一移动move
或通过一个交换swap
.
你最好的选择是使用boost::iterator_facade
编写一个自定义迭代器类来包装数据,并隐藏条带数据格式std::sort
。我过去想做类似的事情,但我的工作区不允许我们使用boost
. EDIT:当你的外观被取消引用时,它可能需要创建某种可以分配/移动/交换的代理对象,并对每个条带数组执行正确的操作。这不是小事。
下一个最佳选择是制作一系列int
s 从零到 N,每个代表条带数据数组的索引。编写一个自定义函子std::sort
它会对此数组进行排序以符合您的条件。当您拥有如此大的数据集时,这显然远非理想。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)