好吧,这将是一口。
我有一个指向序列化二维数组的指针,撇开指针算术不谈,我想从(本质上)两个数组(我计划从二维数组中取出)制作一个成对 vector 。但是,我需要使用 Thrust 库。
这样我就可以根据对中第一个元素的值对 vector 使用 thrust::sort() 。在设备上。
因此,我需要一个成对的 vector (最好是 thrust::device_vector)(显然大小与 arrayOne 和 arrayTwo 的大小匹配),其中第一个元素来自 arrayOne,第二个来自 arrayTwo。这样我就可以使用 thrust::sort() 按对中的 first 元素进行排序。
抱歉,由于缺少代码,但我仍在尝试弄清楚如何实现它的更详细信息,因此出现了这个问题。我会在进行过程中发布我的尝试。提前致谢!
#UPDATE
我想我真的很幸运并找到了解决方案,因为我发布了这个问题(在某种程度上,这是一个比使用 pair 更好的解决方案 - 这反过来又是我提出的上一个问题向我建议的), 默认情况下,Thrust 实际上提供了我正在寻找的内容:
#include <thrust/sort.h>
...
const int N = 6;
int keys[N] = { 1, 4, 2, 8, 5, 7};
char values[N] = {'a', 'b', 'c', 'd', 'e', 'f'};
thrust::sort_by_key(keys, keys + N, values);
// keys is now { 1, 2, 4, 5, 7, 8}
// values is now {'a', 'c', 'b', 'e', 'f', 'd'}
*取自http://code.google.com/p/thrust/wiki/QuickStartGuide#Fancy_Iterators *
所以,现在我所要做的就是从两个数组中获取两个 thrust::device_vectors(我必须从二维数组中获取)。快乐。
最佳答案
楼主找到了一个使用thrust::sort_by_key
的解决方案,如下:
#include <thrust/sort.h>
...
const int N = 6;
int keys[N] = { 1, 4, 2, 8, 5, 7};
char values[N] = {'a', 'b', 'c', 'd', 'e', 'f'};
thrust::sort_by_key(keys, keys + N, values);
// keys is now { 1, 2, 4, 5, 7, 8}
// values is now {'a', 'c', 'b', 'e', 'f', 'd'}
取自 http://code.google.com/p/thrust/wiki/QuickStartGuide#Fancy_Iterators
问题中的应用程序需要创建一对输入迭代器,提供问题中提到的原始倾斜数组的键和值 vector 。
此答案已添加为社区 Wiki 答案,以将此问题从未回答列表中移除
关于c++ - 如何从两个数组中生成一对 vector ,然后使用 CUDA/Thrust 按该对的第一个元素排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7042014/