某些高级语言具有此功能,我正尝试在 C++ 中实现。我不确定是否有某个图书馆已经在某处执行此操作,但如果有,它会为我省去很多麻烦。不管怎样,这就是我想要完成的:
假设我有一个结构 vector ,它有一个 double 和一个 int 作为成员,并且我有另一个 int vector ,它表示我想保留的结构 vector 中元素的索引。
typedef struct
{
double x;
int y;
}s;
std::vector<s> v;
std::vector<int> inds;
有没有办法以类似于此的方式使用索引 vector 来实现对结构中元素的访问,或者是否已经在其他地方实现了?
std::vector<double> dResult = v[inds].x;
std::vector<int> iResult = v[inds].y;
能够以这种方式访问所有元素也很好:
std::vector<double> d = v.x;
这些事情可能吗?
最佳答案
- 您不能将该语法与
std::vector
的现有定义一起使用。 - 您不能创建提供该语法的全局运算符重载函数,因为
operator[]()
只能作为成员函数重载。 - 您可以创建一个提供功能但不使用该语法的非成员函数。
template <typename T1, typename T2>
std::vector<T2> getElements(std::vector<T1> const& vec,
std::vector<int> const& indices,
T2 (T1::*member))
{
std::vector<T2> ret;
for ( auto index : indices )
{
ret.push_back(vec[index].*member);
}
return ret;
}
然后将其用作:
std::vector<s> v;
std::vector<int> inds;
std::vector<double> dResult = getElements(v, inds, &s::x);
关于c++ - 使用 vector 作为索引实现对结构 vector 的访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30987112/