Using std::map with Eigen 3
Using std::map with Eigen 3
为了提高效率,我需要编写一个代码,该代码采用特征 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'];
您的代码正在尝试从完全相反的一端接近解决方案。在那里,您将构造一个映射,其中键的类型为 char
,值为特征向量。
进一步请注意,根据特征主页,自定义分配器仅适用于特征类型的固定大小版本。
为了使用以特征向量作为键的std::map
,您需要一个适当的比较函数。为此,您可以专门化自定义类型允许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'
但是,上面的代码未经测试。
相关文章:
- Eigen如何在容器循环中干净地附加矩阵
- 当在带有Eigen的C++中使用GDB时,我如何才能看到更多的大矩阵
- Problems with std::cin.fail()
- 使用Pybind11向Python公开Eigen::张量
- 如何在没有数据拷贝的情况下从指针创建一个Eigen VectorXd对象
- Eigen:调用lpNorm()的正确方法
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 如何调整 std::vector of Eigen::MatrixXd 的大小
- 如何将 Eigen::Ref 与 pybind11 一起使用?
- Eigen c++ 三角形来自
- 这对"With a stackless coroutine, only the top-level routine may be suspended."意味着什么
- Boost.TEST with CLion: "Test framework quit unexpectedly"
- 如何使用 Eigen::Tensor::convolve with Multiple Kernel?
- Compile Eigen + Intel MKL with CMake
- Eigen on ARM Cortex M3 with armcc
- Eigen norm() with Boost.Units
- 布尔乘法与 exclusive-or, not or (with Eigen Matrix Library)
- Using std::map with Eigen 3
- using eigen with android ndk
- Using Eigen::Vector3f with Opengl ES 2.0 VBO