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

标签 c++ vector operator-overloading

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

相关文章:

c++ - 自动检测不带参数的模板参数

c++ - 如何将系统命令输出存储在变量中?

c++ - 保留 std::vector<> 的前 N ​​个元素并删除其余元素

c# - 关于c#中隐式运算符重载的问题

c++ - 为什么要覆盖 operator()?

c++ - 模板参数包扩展语法的基本原理

C++ text menu : writing, 读取、排序数据

使用 _aligned_malloc() 的 unique_ptr<> 的 C++ 数据对齐

java - 更新链表/vector 的属性

c++ - 使用三个参数重载 operator new 和 operator delete