为了提高效率,我需要编写一个代码,该代码采用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'];
答案 0 :(得分:1)
您的代码正试图从完全相反的方面接近解决方案。在那里,您构建了一个映射,其中键的类型为char
,值为特征向量。
进一步注意,根据Eigen homepage自定义分配器仅需要固定大小版本的特征类型。
为了使用带有特征向量的std::map
作为关键字,您需要一个适当的比较函数。为此,您可以将std::less
专门化为allowed for custom types。这是一个可能的实现:
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'
然而,上面的代码未经测试。