【发布时间】:2015-08-28 07:17:33
【问题描述】:
我有一个派生自 Eigen 模板的 Matrix 类:
template<typename T,
int _Rows = Eigen::Dynamic,
int _Cols = Eigen::Dynamic>
class Matrix : public Eigen::Matrix<T, _Rows, _Cols>
我需要将此类型用作std::map 容器的键,因此我需要一个比较器对象。我想专门为此目的std::less。不编译的草稿版本如下所示,让您了解一下:
template<typename Matrix<typename T,
int _Rows = Eigen::Dynamic,
int _Cols = Eigen::Dynamic> > >
struct less
{
bool operator()(const Matrix<T,
Rows,
Cols>& lhs,
const Matrix<T,
Rows,
Cols>& rhs) const;
{
Matrix<T,
Rows,
Cols>::const_iterator lhsIt = lhs.begin();
Matrix<T,
Rows,
Cols>::const_iterator rhsIt = rhs.begin();
for (;
lhsIt != lhs.end();
++lhsIt, ++rhsIt)
{
if (*lhsIt < *rhsIt)
{
return true;
}
}
return false;
}
};
问题是我想使用模板专门化std::less。对此进行编码的正确方法是什么?我必须求助于模板专业化吗?
我还需要以类似的方式专门化 std::hash 才能使用 std::map。
【问题讨论】:
-
template<typename T, int _Rows, int _Cols> struct less<Matrix<T, _Rows, _Cols> > -
如果你只是在你的 Matrix 类中实现 less 操作符呢?用它作为map中的key就足够了
-
@TomKnapen 除了
_Rows和_Cols是保留标识符
标签: c++ templates c++11 stl eigen