我正在实现的类的一部分看起来像这样:
struct Cord
{
int x_cord;
int y_cord;
Cord(int x = 0,int y = 0):x_cord(x),y_cord(y) {}
bool operator()(const Cord& cord) const
{
if (x_cord == cord.x_cord)
{
return y_cord < cord.y_cord;
}
return x_cord < cord.x_cord;
}
};
class Cell
{
};
std::map<Cord,Cell> m_layout;
我无法编译上面的代码
error C2784: 'bool std::operator <(const std::basic_string<_Elem,_Traits,_Alloc> &,const _Elem *)' : could not deduce template argument for 'const std::basic_string<_Elem,_Traits,_Alloc> &' from 'const Layout::Cord'
有任何建议吗?
答案 0 :(得分:8)
您的operator()
应为operator<
:
bool operator<(const Cord& cord) const
{
if (x_cord == cord.x_cord)
{
return y_cord < cord.y_cord;
}
return x_cord < cord.x_cord;
}
operator<
是std::map
用于订购密钥的内容。
答案 1 :(得分:2)
您可以通过提供operator<(const Cord&, const Cord&)
:
// uses your operator()
bool operator<(const Cord& lhs, const Cord& rhs) { return lhs(rhs);)
或将operator()(const Cord& cord) const
重新命名为operator<(const Cord& cord) const
答案 2 :(得分:2)
您在map
中使用了您的课程,并且需要为其定义operator<
。
// ...
bool operator<(const Cord& cord) const
{
if (x_cord == cord.x_cord)
return y_cord < cord.y_cord;
return x_cord < cord.x_cord;
}
// ...