3

好吧,这将是一口。

我有一个指向序列化二维数组的指针,除了指针算术之外,我想从(基本上)两个数组(我打算从二维数组中取出)制作一个对向量。但是,我需要使用Thrust库。

这样我就可以根据对的第一个元素的值在向量上使用推力::sort()。在设备上。

所以,我需要一个成对的向量(最好是推力::device_vector)(大小显然与arrayOne和arrayTwo的大小相匹配),其中对的第一个元素来自arrayOne,第二个来自arrayTwo。这样我就可以使用推力::sort() 来按对的第一个元素进行排序。

抱歉,由于缺少代码,但我仍在试图弄清楚如何实现这一点的更详细的细节,因此是这个问题。我会在我进行的过程中发布我的尝试。先感谢您!

#更新

我想我实际上很幸运并找到了解决方案,因为我发布了问题(有点,它比使用 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 *

所以,现在我要做的就是从两个数组中取出两个推力::device_vectors(我必须从二维数组中取出)。快乐的。

4

1 回答 1

1

原始海报使用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

问题中的应用程序将需要创建一对输入迭代器,从问题中提到的原始音高数组中提供键和值向量。

此答案已作为社区 wiki 答案添加,以将此问题从未回答列表中删除

于 2014-05-03T09:05:42.577 回答