c++ - 如何从两个数组中生成一对 vector ,然后使用 CUDA/Thrust 按该对的第一个元素排序?

标签 c++ sorting vector cuda thrust

好吧,这将是一口。

我有一个指向序列化二维数组的指针,撇开指针算术不谈,我想从(本质上)两个数组(我计划从二维数组中取出)制作一个成对 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/

相关文章:

r - 如何根据值在矩阵上水平移动行

c++ - 如何初始化我在头文件中定义的 vector ?

c++ - 一个从 list<T> 转换为 vector<T> 的衬垫

c++ - 如何跳转到 C/C++ 函数声明而不是其定义?

c++ - Winsock2,客户端-服务器通信——轮流发送/接收

ruby - 根据多个值对哈希数组进行排序

javascript - 如何通过子属性对相同对象的数组进行排序?

javascript - 用于对数据进行排序的多个 (2) 哈希 URL 参数

c++ - 使用 auto 打印二维 vector 的内容

c++ - 关于c++引用的问题