如何使用结构数组作为结构数组的索引

How do I use an array of struct as an index to an array of struct?

本文关键字:结构 数组 索引 何使用      更新时间:2023-10-16

我有一个结构数组,其中一些运算符重载

struct xyz
{
  int x; float y;
};
std::vector<xyz> a1,a2,a3;

当我将其用作时

a1 [ a2 [ i ] ] = a3 [ i ]
//by this I mean
//a1 [ a2 [ i ].x ].x = a3 [ i ].x
//a1 [ a2 [ i ].x ].y = a3 [ i ].y

我得到这个错误"\OCL6D24.tmp.cl",第236行:错误:表达式必须具有整数或枚举类型

我正在OpenCL内核中使用它。但是这个问题类似于一个普通的C++程序。我该如何解决此问题?

更新:我认为我所需要的是不可能的,尤其是在OpenCL内核的情况下。但我解决了我的问题。这是一个设计缺陷

std::vector::operator[]接受size_t作为输入,但您正在向它传递一个xyz对象。这就是为什么编译器拒绝您的代码。

为了处理您的代码,您可以重载operator int()以将对象隐式转换为整数:

struct xyz
{
  int x; float y;
  operator int()
  {
    return x;
  }
};

但您需要确保返回值和向量中的正确索引相关。

或者使用一些关联容器,如std::unordered_map

您必须使用某种关联容器才能做到这一点。例如std::mapstd::unordered_map(在C++11上)。std::vector只支持使用积分类型进行索引(就像错误所说的那样)。