1

为了提高效率,我需要编写一个代码,该代码采用 Eigen 3 VectorXi 中定义的整数向量,并将该向量映射到字符。就像 Python 中的字典一样。我怎样才能做到这一点?Eigen 文档以相反的方式做事(见下文)——它将一个字符映射到一个向量。我无法让它反向工作。有没有人试过这个?

std::map<char,VectorXi, std::less<char>,
     Eigen::aligned_allocator<std::pair<char, VectorXi> > > poop;

VectorXi check(modes);
check << 0,2,0,0;
poop['a']=check;
cout << poop['a'];
4

1 回答 1

2

您的代码正试图从完全相反的方面接近解决方案。在那里,您构建了一个映射,其中键是类型char,值是特征向量。

进一步注意,根据Eigen 主页,自定义分配器仅适用于 Eigen 类型的固定大小版本。

为了使用std::map带有特征向量的 a 作为键,您需要一个适当的比较函数。为此,您可以专门std::less用于自定义类型。这是一个可能的实现:

namespace std
{
     template<>
     std::less<Eigen::VectorXi>(Eigen::VectorXi const& a, Eigen::VectorXi const& b)
     {
          assert(a.size()==b.size());
          for(size_t i=0;i<a.size();++i)
          {
               if(a[i]<b[i]) return true;
               if(a[i]>b[i]) return false;
          }
          return false;
     }
}

然后你应该可以写

std::map<VectorXi, char> poop;

VectorXi check;
check << 0,2,0,0;
poop[check]='a';
cout << poop[check];  //prints 'a'

但是,上面的代码未经测试。

于 2014-11-21T00:25:08.427 回答