gpt4 book ai didi

c++ - 使用 vector 作为索引实现对结构 vector 的访问

转载 作者:行者123 更新时间:2023-11-30 01:47:54 24 4
gpt4 key购买 nike

某些高级语言具有此功能,我正尝试在 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;

这些事情可能吗?

最佳答案

  1. 您不能将该语法与 std::vector 的现有定义一起使用。
  2. 您不能创建提供该语法的全局运算符重载函数,因为 operator[]() 只能作为成员函数重载。
  3. 您可以创建一个提供功能但不使用该语法的非成员函数。

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com