【发布时间】:2014-11-11 22:55:35
【问题描述】:
我有一个 (i,j,k) 格式(来自稀疏矩阵)的巨大表(大约 50Gb),存储为
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的3 个参数版本,然后查找functor或function object。 -
所以你需要帮忙——如果我给你两个 (i,j,k) 值,告诉我们你将如何确定第一个值是否在第二个值之前。还有这个“表”是什么形式的?您需要更详细地告诉我们这些数据的结构。
-
那么您希望对所有三个数组进行排序吗?最简单的方法是将它们全部组合成一个
struct,并且只有一个该类型的数组。 -
我不明白如何使用三参数版本的排序。 RandomAccessIterator 会在这里是什么?这就是我对非标准数据类型的意思:如果您的值按照 Jonathan 的建议存储为单个类对象(这对我来说是不可行的,因为将这样的结构构造为我的数据我会用完内存),但如果您的数据分布在多个数组中,则无关紧要。